OC 類裹唆、對(duì)象的創(chuàng)建和使用

OOP面向?qū)ο缶幊?Object-Oriented Programming


什么是對(duì)象究珊?對(duì)象是對(duì)客觀事物的抽象和封裝(特征數(shù)據(jù)+行為方法)
什么是類瓤摧?類是對(duì)對(duì)象的抽象竿裂,是一種抽象的數(shù)據(jù)類型。
對(duì)象是類的實(shí)例姻灶,類是對(duì)象的模版铛绰。

一、function 函數(shù)

void drawShapes(id shapes[], int count){
    for(int i=0 ; i<count ; i++){
        id shape = shapes[i];
            [shape draw];
    }
}//drawShapes
  • 不在類里面产喉,不能聲明方法捂掰,只能聲明C語言里的函數(shù)。
  • oc中[ ]意義:用于通知某個(gè)對(duì)象該去做什么(消息機(jī)制)
    第一項(xiàng)是對(duì)象曾沈,其余部分是需要對(duì)象執(zhí)行的操作(即發(fā)送消息/調(diào)用方法)这嚣。
    具體過程:對(duì)象是消息的目標(biāo),先查出它屬于哪一個(gè)類塞俱,再找到相應(yīng)函數(shù)執(zhí)行姐帚。

二、 interface接口 -> 類的聲明

  1. 接口是類為對(duì)象提供的特性描述障涯。
  2. 基本數(shù)據(jù)類型
    NSInteger整型
    NSUInteger無符號(hào)整數(shù)
    NSString字符串
    NSString* 指針類型 賦值str=@“123”
    CGFloat 小數(shù) 來自CoreGraphics框架
  3. 類聲明寫法:
@interface Person:NSObject{     //@interface標(biāo)志罐旗,NSObject表示類的繼承
    NSInteger _age;      //數(shù)據(jù)成員膳汪,實(shí)例變量
    NSString* _name;
}
//聲明類的功能,類給外部提供的功能,不表示是類的全部功能九秀。對(duì)業(yè)務(wù)邏輯進(jìn)行保護(hù)
-(void) setName: (NSString*) name;   //-方法聲明 (void)方法返回類型 參數(shù)
-(NSString*) name;
@end //Person
  • OC方法可以返回與C函數(shù)相同的類型:標(biāo)準(zhǔn)類型(整型遗嗽、浮點(diǎn)型和字符串)、指針鼓蜒、引用對(duì)象和結(jié)構(gòu)體痹换。
  • 中綴符語法技術(shù)
    【類聲明語法】 + / - (返回類型) 名字1:(類型1)參數(shù)1 名字2:(類型2)參數(shù)2 …..
    • +類型方法 [類名 類型方法]
    • -實(shí)例方法 [對(duì)象 實(shí)例方法]
      -(void)setInitX:(int)n andSetInitY:(int)d;
    
    • 例子中在第二個(gè)參數(shù)前面設(shè)置一個(gè)中綴符(andSetInitY),中綴符也是函數(shù)名的一部分都弹。
    • 中綴符解決了方法調(diào)用時(shí)的代碼可讀性問題
      【調(diào)用】[test setInitX:1 andSetInitY:2];
    • 若在Java中則會(huì)寫成public void setInit(int n, int d);
      Java和OC二種語法比較起來就好像是數(shù)學(xué)中的分配率:a(b+c) = ab+ac
    • 最后用表格來對(duì)比一下C和OC
比較項(xiàng)目 C OC
無參數(shù) int foo(); -(int)foo;
int ret= obj->foo(); int ret = [obj foo];
一個(gè)參數(shù) int foo(int a); -(int)foo:(int)a;
int ret = obj->foo(100); int ret = [obj foo:100];
兩個(gè)參數(shù) int foo(int a,int b); -(int) foo:(int)a :(int)b;
int ret = obj->foo(10,20); int ret = [obj foo:10 :20];
帶標(biāo)簽 int fooAndB(int a, int b); -(int)foo:(int)a andB:(int)b;
int ret = obj->fooAndB(10,2); int ret = [obj foo:10 andB:2];

三娇豫、implementation -> 類的實(shí)現(xiàn)

  1. 實(shí)現(xiàn)是使接口能正常工作的代碼
@implementation Person
-(void) setName: (NSString*) name {  
//參數(shù)要重新命名,不能與成員變量同名畅厢,否則會(huì)覆蓋初始變量
    _name=name;
}
-(NSString*)name{
    return _name;
}

四冯痢、對(duì)象的創(chuàng)建

  1. 分配內(nèi)存+初始化 (具體在下一篇構(gòu)造方法中展開介紹)
    OC的對(duì)象都是動(dòng)態(tài)分配在堆中,只能通過指針訪問
  2. 消息機(jī)制 【接受者 消息 (方法)】
    【對(duì)象 對(duì)象方法】或详;
    【類名 類型方法】系羞;
int main(int argc, const char *argv[])
{
    Shape* shape1 = [Shape new ]; //自動(dòng)調(diào)用的方法
    Shape* shape2 = [ [Shape alloc] init ]; //與上一行等價(jià),但二者指向不同地址
    return (0);
}
  1. 對(duì)象創(chuàng)建使用結(jié)束后需要釋放內(nèi)存
    • ARC (Automatic Reference Counting) 自動(dòng)引用計(jì)數(shù)郭计,釋放沒有指針再指向的內(nèi)存塊
    • MRC (Mannul Reference Counting) 手動(dòng)管理,向?qū)ο蟀l(fā)送release消息 [shape release];

五霸琴、getter/setter方法

@interface Person : NSObject{
    NSString* _name;
    NSInteger _age;
}
//聲明類的功能,類給外部提供的功能
-(void)setName:(NSString*)name;  //setter方法聲明
-(NSString*)name;  //getter方法聲明
@end

@implementation Person
-(void)setName:(NSString *)name{      // setter方法實(shí)現(xiàn),將參數(shù)name的值賦給成員變量_name
    _name=name;
}
-(NSString*)name{       // getter方法的實(shí)現(xiàn)昭伸,獲取當(dāng)前對(duì)象成員變量_name的值
    return _name;
}
@end
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末梧乘,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子庐杨,更是在濱河造成了極大的恐慌选调,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件灵份,死亡現(xiàn)場(chǎng)離奇詭異仁堪,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)填渠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門弦聂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人氛什,你說我怎么就攤上這事莺葫。” “怎么了枪眉?”我有些...
    開封第一講書人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵捺檬,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我贸铜,道長(zhǎng)堡纬,這世上最難降的妖魔是什么聂受? 我笑而不...
    開封第一講書人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮烤镐,結(jié)果婚禮上饺饭,老公的妹妹穿的比我還像新娘。我一直安慰自己职车,他們只是感情好瘫俊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著悴灵,像睡著了一般扛芽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上积瞒,一...
    開封第一講書人閱讀 51,365評(píng)論 1 302
  • 那天川尖,我揣著相機(jī)與錄音,去河邊找鬼茫孔。 笑死叮喳,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的缰贝。 我是一名探鬼主播馍悟,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼剩晴!你這毒婦竟也來了锣咒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤赞弥,失蹤者是張志新(化名)和其女友劉穎毅整,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體绽左,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡悼嫉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了拼窥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片戏蔑。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖闯团,靈堂內(nèi)的尸體忽然破棺而出辛臊,到底是詐尸還是另有隱情,我是刑警寧澤房交,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布彻舰,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏刃唤。R本人自食惡果不足惜隔心,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望尚胞。 院中可真熱鬧硬霍,春花似錦、人聲如沸笼裳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽躬柬。三九已至拜轨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間允青,已是汗流浹背橄碾。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留颠锉,地道東北人法牲。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像琼掠,于是被迫代替她去往敵國和親拒垃。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1.項(xiàng)目經(jīng)驗(yàn) 2.基礎(chǔ)問題 3.指南認(rèn)識(shí) 4.解決思路 ios開發(fā)三大塊: 1.Oc基礎(chǔ) 2.CocoaTouch...
    陽光的大男孩兒閱讀 4,986評(píng)論 0 13
  • 307眉枕、setValue:forKey和setObject:forKey的區(qū)別是什么恶复? 答:1, setObjec...
    AlanGe閱讀 1,547評(píng)論 0 1
  • ———————————————回答好下面的足夠了---------------------------------...
    恒愛DE問候閱讀 1,717評(píng)論 0 4
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 3,805評(píng)論 1 10
  • 中午怜森,上體育課的時(shí)候我們班在學(xué)校遇到了鐘老師速挑,陳黃龍大聲喊:“中午老師好!”嚴(yán)璟宸問他說:“什么是中午老師好?”陳...
    祉延閱讀 299評(píng)論 0 0