&1.1.屬性定義 :A;
@property 在.h文件中實現
1.@property 屬性關鍵字 用來定義屬性
2.@property NSString *name;
3.屬性作用:就是一組setter和getter方法 與類相似 屬性也需要聲明和實現 屬性的類型,代表setter方法參數類型,以及getter方法返回值類型.
B:synthesize合成實現.在.m文件中實現
用來setter和getter方法的實現.後跟屬性名(也就是是要實現哪一組setter和getter方法) = 右邊填寫實例變量名, 在實現實例變量名字
&1.2 讀寫特性 @property (readwrite) NSString * name; readonly只讀只能生成getter方法 //讀寫特性
1.readwrite可讀可寫(默認),自動生成setter和getter方法
2.readonly只讀,自動生成getter方法,不會生成setter方法.
getter=方法名(特記只是修改getter方法名其餘內容不變)@property (readwrith,getter = aa) NSString * name; setter=方法名(特記setter方法的方法名不要忘記加冒號,也只是修改setter方法名) @property (readwrith,setter = bb:) NSString * name;
B.原子性特性.考慮:效率與安全性) //
1.atomic:有原子性,保證線程安全,默認 //
2.nonatomic:非原子性,不保證安全性,推薦使用@property (nonatomic, readwrith,setter = bb:) NSString * name;
C. 語義特性:
1.assign 用於基本數據類型,對象也可以使用,只是簡單賦值
2.retain 適用於對象,在內部做優化,擁有所有權.例如:@property (nonatomic,retain) NSString * name;
3.copy 適用於對象類型,複製出一個新對象,對新對象擁有所有權.
D. 點語法: 通過對象,屬性名,如果操作符在左邊,則內部調用的setter方法,給實例變量賦值,否則是調用getter方法取出實例變量名,
特記:點是屬性,不是實例變量.
p.age = 20;等價於[p setAge:20];
int age = P.age;等價於 int age = [p age];
stu.name = @"bb";等價於[stu setWithName:@"bb"]
stu.name;等同於[stu name];)