OC語(yǔ)言@property@synthesize和id

1.property

@property是編譯器的指令什么是編譯器的指令,編譯器指令就是用來(lái)告訴編譯器要做什么

@property告訴編譯器聲明屬性的訪問(wèn)器(getter/setter)方法

好處:免去我們手工書(shū)寫(xiě)get和set方法繁瑣的代碼

用法:@property類(lèi)型方法名

尤其注意:@property只能寫(xiě)在@interface @end中,

@property用來(lái)自動(dòng)生成成員變量的get/set方法聲明(xcode4.4以前)告訴property要生成的get/set方法聲明的成員變量類(lèi)型是什么告訴property要生成的get/set方法是哪個(gè)屬性的,屬性名稱(chēng)去掉下劃線(xiàn)

2,@synthesize

@synthesize是在m文件中定義set和get方法的實(shí)現(xiàn)。

注意:

如果@synthesize變量名要先在.h文件中聲明

@property int age;

.h -(void)setAge:(int)age; -(int)age;

.m -(void)setAge:(int)age{

slef->age = age; }

-(int)age{

return age; }

@synthesize age

3.@property增強(qiáng)使用

幫助我們自動(dòng)生成get/set方法的聲明,幫助我們自動(dòng)生成get/set方法的實(shí)現(xiàn)

-(void)setScore:(int) score{

_score = score;

}

-(int)score{

return _score

@property下重寫(xiě)get和set方法

1)如果手動(dòng)實(shí)現(xiàn)了set方法,那么編譯器就只生成get方法和成員變量; 2)如果手動(dòng)實(shí)現(xiàn)了get方法,那么編譯器就只生成set方法和成員變量; 3)如果set和get方法都是手動(dòng)實(shí)現(xiàn)的,那么編譯器將不會(huì)生成成員變量,并且報(bào)錯(cuò)。

4.動(dòng)態(tài)類(lèi)型和靜態(tài)類(lèi)型

多態(tài):允許不同的類(lèi)定義相同的方法。

動(dòng)態(tài)類(lèi)型:程序直到執(zhí)行時(shí)才能確定所屬的類(lèi)。

靜態(tài)類(lèi)型:將一個(gè)變量定義為特定類(lèi)的對(duì)象時(shí),使用的是靜態(tài)形態(tài)。

5.id類(lèi)型

id是一種通用的對(duì)象類(lèi)型,它可以用來(lái)存儲(chǔ)屬于任何類(lèi)的對(duì)象也可以理解為萬(wàn)能指針

注意在id的定義中,已經(jīng)包好了*號(hào)。id指針只能指向oc的對(duì)象。

id類(lèi)型的定義

Typedef struct objc object{

Class isa; } *id;

Animal *animal = [Animal new]; //狗的類(lèi),狗繼承自動(dòng)物

Dog *dog = [Dog new]; //貓的類(lèi),貓繼承自動(dòng)物

Cat *cat = [Cat new]; //定義id類(lèi)型

id obj = cat; //id obj = dog; [obj run];

6.構(gòu)造方法的概念

構(gòu)造方法:用來(lái)初始化對(duì)象實(shí)例變量值的方法,是個(gè)對(duì)象方法,-開(kāi)頭重寫(xiě)構(gòu)造方法的目的:為了讓對(duì)象創(chuàng)建出來(lái),成員變量就會(huì)有一些固定的值

調(diào)用:

完整的創(chuàng)建一個(gè)可用的對(duì)象:Person *p=[Person new]; new方法的內(nèi)部會(huì)分別調(diào)用兩個(gè)方法來(lái)完成3件事情:

(1)使用alloc方法來(lái)分配存儲(chǔ)空間(返回分配的對(duì)象); (2)使用init方法來(lái)對(duì)對(duì)象進(jìn)行初始化。(3)返回對(duì)象的首地址

可以把new方法拆開(kāi)如下: (1).調(diào)用類(lèi)方法+alloc分配存儲(chǔ)空間,返回未經(jīng)初始化的對(duì)象

Person *p1=[Person alloc]; (2).調(diào)用對(duì)象方法-init進(jìn)行初始化,返回對(duì)象本身

Person *p2=[p1 init]; (3).以上兩個(gè)過(guò)程整合為一句:

Person *p=[[Person alloc] init];

尤其注意:

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

(2)原則:先初始化父類(lèi)的,再初始化子類(lèi)的。(3)重寫(xiě)構(gòu)造方法的目的:為了讓對(duì)象方法一創(chuàng)建出來(lái),成員變量就會(huì)有一些固定的值。

(4)注意點(diǎn):

(1)先調(diào)用父類(lèi)的構(gòu)造方法[super init]; (2)再進(jìn)行子類(lèi)內(nèi)部成員變量的初始化。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.@property @synthesize關(guān)鍵字 *注意:這兩個(gè)關(guān)鍵字是編譯器特性,讓xcode可以自動(dòng)生成g...
    隔壁小羊閱讀 212評(píng)論 0 0
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類(lèi)相關(guān)的語(yǔ)法,內(nèi)部類(lèi)的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線(xiàn)程的語(yǔ)...
    子非魚(yú)_t_閱讀 34,626評(píng)論 18 399
  • 1. 使用 #import 相對(duì)c的 include 是防止頭文件的重復(fù)導(dǎo)入 2. NSLog 相對(duì)于 print...
    迎風(fēng)起飛的豬閱讀 1,971評(píng)論 6 9
  • 5/22為愛(ài)堅(jiān)持,親子共讀day4 這幾天已經(jīng)習(xí)慣了邊運(yùn)動(dòng)邊聽(tīng)課,今早再一次聽(tīng)了王芳老師的做對(duì)這三件事(做個(gè)讓...
    曦哈小子閱讀 239評(píng)論 0 0
  • 我出身于農(nóng)村,家里有著數(shù)代人都是種地的背景,我也挺慶幸自己能夠生在農(nóng)村,因?yàn)橐彩寝r(nóng)村,讓我自小就有獨(dú)立奮斗的意識(shí);...
    光芒那方閱讀 415評(píng)論 2 1

友情鏈接更多精彩內(nèi)容