OC-構(gòu)造方法

一穿撮、【掌握】點(diǎn)語(yǔ)法的介紹和使用


1.點(diǎn)語(yǔ)法是編譯器特性达传,當(dāng)編譯器看到對(duì)象使用點(diǎn)語(yǔ)法嘀掸,會(huì)自動(dòng)把點(diǎn)語(yǔ)法轉(zhuǎn)換為調(diào)用set或get方法的形式

2.使用

Student *s = [Student new];

s.age = @"daa";

Int age = s.age;

3.本質(zhì):就是set或者get方法

遇見(jiàn)s.age = 10;形式稀拐,就會(huì)自動(dòng)展開(kāi)為:[s setAge:10];

遇見(jiàn)int a = s.age啸澡;形式拐邪,就會(huì)自動(dòng)展開(kāi)為:int a = [s age];

4.注意事項(xiàng)

1)- (void)setAge:(int)age

{

Self.age = age;//死循環(huán)

}

2)- (int)age

{

Return self.age;

}

注意點(diǎn):什么時(shí)候會(huì)生成set方法什么時(shí)候會(huì)生成get方法慰毅?

如果有賦值運(yùn)算符,生成set方法扎阶,否則生成get方法汹胃。


二、【了解】@property關(guān)鍵字介紹和使用


用@property取 代set和get方法的聲明

用@synthesize取代set和get方法的實(shí)現(xiàn)(會(huì)生成一個(gè)私有的成員變量)


@synthesize name

能夠生成如下代碼:

1.@synthesize生成的第一部分代碼

{

NSString *name;

}

2.-(void)setName:(NSString *)name

{

Self->name = name;

}

-(NSString *)name

{

Return self->name;

}

//如果成員變量中已有name變量东臀,則不會(huì)生成私有name變量着饥,直接賦值

問(wèn)題:想要給自己已有的帶下劃線的成員變量進(jìn)行賦值,怎么辦惰赋?

需要給@synthesize指定宰掉,告訴該賦值給誰(shuí)。

@synthesize name = _name;

他就知道赁濒,賦值給_name;


三轨奄、【掌握】property的增強(qiáng)用法


@property的組合用法:

只要同種類(lèi)型,就可以寫(xiě)在一起拒炎,用逗號(hào)分隔(建議一個(gè)成員變量寫(xiě)一行)

比如:

@property int age,height,weight;

@property NSString *name;

@synthesize的組合用法:

不區(qū)分?jǐn)?shù)據(jù)類(lèi)型挪拟,只要被@property修飾,就可以卸載一起击你,用逗號(hào)進(jìn)行分隔

比如:

@synthesize age = _age,height = _height,weight =

_weight,name = _name;


@property的加強(qiáng)用法

同時(shí)-->

生成set和get方法的聲明

生成set和get方法的實(shí)現(xiàn)

生成帶下劃線的成員變量


注意事項(xiàng):

當(dāng)用戶(hù)手動(dòng)重寫(xiě)了set方法時(shí)玉组,@property會(huì)生成get方法和帶下劃線的成員變量

當(dāng)用戶(hù)手動(dòng)重寫(xiě)了set和get方法時(shí),@property不會(huì)生成帶下劃線的成員變量

當(dāng)用戶(hù)手動(dòng)重寫(xiě)了get方法時(shí)丁侄,@property會(huì)生成set方法和帶下劃線的成員變量



三球切、【理解】id類(lèi)型及應(yīng)用場(chǎng)景

id出廠自帶*?? id cat = [Cat new];


id萬(wàn)能指針,能夠指向任何OC對(duì)象

NSObject:是所有類(lèi)的父類(lèi)吨凑,也就是基類(lèi)鸵钝”涮樱可以指向任何OC對(duì)象

區(qū)別:編譯器對(duì)NSObject做類(lèi)型檢測(cè)揽乱,但是不對(duì)id做類(lèi)型檢測(cè)

用@property id obj凰棉;其中obj可以賦值任何OC對(duì)象,如:

s.obj? ? ? = @"obj可以賦值任何OC對(duì)象";


四派桩、動(dòng)態(tài)類(lèi)型檢測(cè)


動(dòng)態(tài)綁定

在objective-c中,一個(gè)對(duì)象內(nèi)是否調(diào)用指定的方法不是由編譯器決定而是由運(yùn)行時(shí)決定袜啃,這被稱(chēng)作是方法的動(dòng)態(tài)綁定。

在objective-c中,對(duì)象不是調(diào)用方法,而是接收消息抵栈,消息表達(dá)式為:

[reciver message];

運(yùn)行時(shí)系統(tǒng)首先確定接受者的類(lèi)型(動(dòng)態(tài)類(lèi)型識(shí)別)告材,然后根據(jù)消息名在類(lèi)的方法列表里選擇相應(yīng)的方法執(zhí)行,所以在源代碼里消息也稱(chēng)為選擇器SEL。

消息函數(shù)的作用:

首先通過(guò)第一個(gè)參數(shù)的receiver杠览,找到它的isa指針管钳,然后在isa指向的Class對(duì)象中使用第二個(gè)參數(shù)SEL查找方法;

如果沒(méi)有找到,就是用當(dāng)前Class對(duì)象中的新的isa指針到上一級(jí)的父類(lèi)的Class對(duì)象中查找焰手;

當(dāng)找到方法后怀喉,再一句receiver中的self指針找到當(dāng)前的對(duì)象聊闯,調(diào)用當(dāng)前對(duì)象的具體實(shí)現(xiàn)方法(IMP)拴泌,然后傳遞參數(shù)箭昵,調(diào)用實(shí)現(xiàn)方法

假如一只找到NSObject的Class對(duì)象,也沒(méi)有找到你調(diào)用的方法回季,就會(huì)報(bào)告不能識(shí)別家制,發(fā)送消息的錯(cuò)誤

動(dòng)態(tài)監(jiān)測(cè)的方法

?1)判斷對(duì)象是不是指定類(lèi)的對(duì)象或者指定類(lèi)的子類(lèi)對(duì)象


原型:-(BOOL)isisKindOfClass:(Class)aClass;

? ? BOOL res = [son

isKindOfClass:dog];

?2)判斷對(duì)象是不是一個(gè)特定類(lèi)型的對(duì)象,不包括子類(lèi)


原型:-(BOOL)isisMemberOfClass:(Class)aClass;

? ? BOOL res = [son

isMemberOfClass:dog];

?3)判斷一個(gè)類(lèi)是不是另外一個(gè)類(lèi)的子類(lèi)


原型:+(BOOL)isSubclassOfClass:(Class)aClass;

?4)判斷對(duì)象中是否能影響指定的方法,這個(gè)最常用


原型:-(BOOL)respondsToSelector:(Class)aClass;

? ? BOOL res = [son

respondsToSelector:s];

?5)判斷類(lèi)中是否能響應(yīng)指定方法


原型:+(BOOL)instancesRespondToSelector:(SEL)aSelector;


五、響應(yīng)方法


Dog *d = [Dog new];

[d performSelector:@selector(run)];

//帶一個(gè)參數(shù)的

[d performSelector:@selector(eat:)withObject:@"www"];


六泡一、構(gòu)造方法的概念


重點(diǎn):自定義構(gòu)造方法颤殴。


構(gòu)造方法:用來(lái)初始化對(duì)象實(shí)例變量值


?new一下,就能有一個(gè)對(duì)象

?1.分配內(nèi)存空間 ? ? +

alloc

?2.初始化. ? ? ?

? - init


?構(gòu)造方法:指的就是初始化方法



需求:創(chuàng)建10只狗,讓這些狗在創(chuàng)建時(shí),所有的年齡都是1歲.

可以通過(guò)重寫(xiě)init方法

?- (instancetype)init

?{

?self = [super init];

?if (self) {

?//子類(lèi)的初始化等等其他操作,都在這個(gè)花括號(hào)里面做

?_age = 1;

?}

?return self;

?}


Dog *d = [[Dog alloc] init];


說(shuō)明;

1)init方法就是構(gòu)造方法,是用來(lái)初始化對(duì)象的方法鼻忠,注意這是一個(gè)對(duì)象方法涵但,以減號(hào)開(kāi)頭。默認(rèn)初始化完畢后粥烁,所有成員變量的值為0

2)alloc

向某個(gè)類(lèi)發(fā)送alloc消息的結(jié)果

為該類(lèi)分配內(nèi)存贤笆,以存放該類(lèi)的全部實(shí)例變量

還將這塊內(nèi)存區(qū)域全部初始化為0


注意:

一個(gè)剛剛分配的對(duì)象并不能立即使用

需要先初始化該對(duì)象蝇棉,然后才能使用它

但由于未進(jìn)行初始化讨阻,隨后可能出現(xiàn)一些不可預(yù)測(cè)的行為


初始化成員變量

OC對(duì)象初始化為nil

C語(yǔ)言指針初始化為:NULL

基本數(shù)據(jù)類(lèi)型初始化為:0


誰(shuí)調(diào)用self所在的方法,self就指向誰(shuí)篡殷,self就是誰(shuí)


構(gòu)造方法使用注意

子類(lèi)擁有的成員變量包括自己的成員變量以從父類(lèi)繼承而來(lái)的成員變量钝吮,在重寫(xiě)構(gòu)造方法的時(shí)候應(yīng)該首先對(duì)從父類(lèi)繼承而來(lái)的成員變量先進(jìn)行初始化

原則:先初始化父類(lèi)的,再初始化子類(lèi)的

重寫(xiě)構(gòu)造方法的目的:為了讓對(duì)象方法一創(chuàng)建出來(lái),成員變量就會(huì)有一定的固定的值奇瘦。

注意點(diǎn):

先調(diào)用父類(lèi)的構(gòu)造方法[super init];

在進(jìn)行子類(lèi)內(nèi)部成員變量的初始化棘催。


自定義構(gòu)造方法

? 自定義構(gòu)造方法的規(guī)范

一定是對(duì)象方法,以減號(hào)開(kāi)頭

返回值一般是id(instancetype)類(lèi)型

方法名一定以initWith開(kāi)頭


//自定義構(gòu)造方法

//命名的時(shí)候:init后邊接了單詞首字母必須大寫(xiě)

- (instancetype)initWithName:(NSString*)name andAge:(int)age;

//實(shí)現(xiàn)

- (instancetype)initWithName:(NSString*)name andAge:(int)age

{

? ? //必須調(diào)回父類(lèi)的構(gòu)造方法

? ? if(self = [super init])

? ? {

? ? ? ? _name = name;

? ? ? ? _age = age;

? ? }

return self;

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末耳标,一起剝皮案震驚了整個(gè)濱河市醇坝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌次坡,老刑警劉巖呼猪,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異砸琅,居然都是意外死亡宋距,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)症脂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)谚赎,“玉大人,你說(shuō)我怎么就攤上這事诱篷『剑” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵兴蒸,是天一觀的道長(zhǎng)视粮。 經(jīng)常有香客問(wèn)我,道長(zhǎng)橙凳,這世上最難降的妖魔是什么蕾殴? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮岛啸,結(jié)果婚禮上钓觉,老公的妹妹穿的比我還像新娘。我一直安慰自己坚踩,他們只是感情好荡灾,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著瞬铸,像睡著了一般批幌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嗓节,一...
    開(kāi)封第一講書(shū)人閱讀 49,036評(píng)論 1 285
  • 那天荧缘,我揣著相機(jī)與錄音,去河邊找鬼拦宣。 笑死截粗,一個(gè)胖子當(dāng)著我的面吹牛信姓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播绸罗,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼意推,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了珊蟀?” 一聲冷哼從身側(cè)響起菊值,我...
    開(kāi)封第一講書(shū)人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎育灸,沒(méi)想到半個(gè)月后俊性,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡描扯,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年定页,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绽诚。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡典徊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出恩够,到底是詐尸還是另有隱情卒落,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布蜂桶,位于F島的核電站儡毕,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏扑媚。R本人自食惡果不足惜腰湾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望疆股。 院中可真熱鬧费坊,春花似錦、人聲如沸旬痹。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)两残。三九已至永毅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間人弓,已是汗流浹背沼死。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留票从,地道東北人漫雕。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像峰鄙,于是被迫代替她去往敵國(guó)和親浸间。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

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