天天看點

OC學習日記04-OC中類的屬性OC中類的屬性

OC中類的屬性

OC學習日記04-OC中類的屬性OC中類的屬性

前言

在OC的類中,我們想把自己一些類裡面的變量給隐藏起來,就要用到@protected還有@private,而對這些變量進行指派還有調用,就要用到設定器(setter)與通路器(getter),但是我們會發現,如果用到标準的設定器和通路器的定義的話,代碼量會非常的大,如果在制作大程式的時候,會使代碼非常的“累贅”。那麼,有沒有簡便的方法呢,這時候就要用到我們今天所說的類的屬性。

标準的設定器與通路器格式例子:

OC學習日記04-OC中類的屬性OC中類的屬性
OC學習日記04-OC中類的屬性OC中類的屬性

屬性的聲明

@property NSString *homeAddress;

相當于聲明了設定器 與 通路器-(void)setAddress:(NSString*) address;與-(NSString *)address;

而屬性的使用也非常簡單:

在.h檔案中的文法為:

@property (readwrite,nonatomic,strong) NSString *name;
@property (readonly,nonatomic,assign)NSInteger age;
@property NSString *homeAddress;           

在.m檔案中的文法為:

@synthesize homeAddress =_homeAddress;           

注意:

如果我們@synthesize 注釋掉 這個時候系統會為我們産生下劃線開頭的變量

_homeAddress

通路讀寫 原子性,記憶體管理

1.存取方法名稱

系統預設的存取方法名稱 propertyName 和 setPropertyName ,例如name 和 setName:方法,這樣做友善采用點文法,可以采用預設的存取方法。

getter=getterName

setter=setterName

注意,如果改變了getter和setter方法名稱,則必須提供自定義的方法。

2.屬性的定義的相關文法

通路讀寫

readonly 指明屬性是隻讀的,系統隻會産生getter,而不會産生setter方法‘

readwrite 指明屬性是可讀寫的,這是預設的,是以可以省略

對于隻讀屬性,如果試圖通過點文法指派,會編譯錯誤

原子性

atomic 原子操作,這是預設的

nonatomic 非原子操作,一般就使用nonautomic,但是沒有辦法保證在多線程環境下不出錯。

記憶體管理

retain

會通過retain來持有目标屬性對象,之前的對象會接收到釋放的消息

copy

會通過copy複制對象,之前的對象會接收到釋放的消息

assign

采用簡單的指派方法,這是預設的方法

strong

表示強引用關系,即擁有目标對象的所有權

weak

表示弱引用關系,不擁有目标對象的所有權。當目标對象被銷毀之後,屬性隻會被自動設為nil。

關于記憶體管理這幾個文法的差別

strong 相當于retain 或者是copy,當我們這個屬性是對象(NSString)的時候,我們就要用這三個strong、retain 、copy。

weak 相當于 assgin,基本資料類型就要用到assgin或者weak來描述。

點文法

在主函數main中我們可以對其通過點文法引用:

NewStudent *newStudent1=[[NewStudent alloc]initWithName:@"Wsss" Age:23 HomeAddress:@"Wsss"];
        NewStudent *newStudent2=[NewStudent newStudentWithName:@"Wsss" Age:23 HomeAddress:@"Wsss"];
        newStudent1.name[email protected]"sss";
        newStudent2.name[email protected]"asdas";
      NewStudent *newStudent=[[NewStudent alloc]init];
        newStudent.name[email protected]"Rick";
       // newStudent.age[email protected]"25";
        newStudent.homeAddress[email protected]"GZ";
        NSLog(@"%@",newStudent.name);           

繼續閱讀