一、屬性
1、屬性的聲明:在.h文件中使用@property聲明屬性。
@property NSString *name;
2、屬性的作用是生成setter以及getter方法的實現,如果方法內部操作的實例變量未定義,系統會自動生成一個_屬性名的實例變量,但是生成的實例變量的可見度是私有的,子類不可訪問。
3、一旦同時重寫了setter、getter方法,並且沒有實現@synthesizer,@synthesizer就不再生成實例變量。
二、屬性的特性
1、屬性的特性:為屬性提供了一些關鍵字用以控制setter、getter的實現細節,這些關鍵字稱為屬性的特性(attribute);
2、讀寫性
1)readonly:只讀狀態,是告訴編譯器,屬性只生成getter方法,不生成setter方法;
2)readwrite:讀寫狀態,是告訴編譯器,屬性既生成setter方法又生成getter方法,既有設置器,也有訪問器,默認的讀寫特性;
3)setter=:指定屬性生成的setter方法的名字;
4)getter=:指定屬性生成的getter方法的名字。
@property (readwrite, setter=setname:, getter = getname) NSString *name;
3、原子性
1)atomic:原子特性,setter、getter方法在多線程訪問下是絕對安全的,即setter、getter內部做了多線程訪問處理。默認的原子特性。
2)nonatomic:非原子特性,settler、getter方法內部不會做多線程訪問處理,僅僅是普通的setter、getter方法。
3)程序開發過程中,setter、getter會頻繁使⽤,如果使⽤atomic需要 不斷的對setter、getter加鎖解鎖以保證線程訪問的安全,會⾮常占⽤系統資源,降低系統性能。聲明屬性時,通常使用nonatomic。
@property (nonatomic) NSString *name;
4、語義特性
1)如果屬性是非對象類型(比如int、float等)屬性的語義設置使用assgin;
2)如果屬性是對象類型(比如NSString等)並且要保留這個對象的時候,屬性的語義設置使用retain;
3)如果屬性是對象類型並且想要得到對象的副本,使用copy。
三、點語法
1、只要符合系統默認setter、getter書寫格式的方法都可以使用點語法,
屬性是一對getter、setter方法,點語法是屬性的另一種調用格式。
setter方法:
[person setName:@“Lily”];
使用點語法:
person.name = @“Lily”;
getter方法:
NSString *string = [person name];
使用點語法
NSString *string = person.name;
2、類之間的循環引入問題 (#import 與 @class的區別)
#import “Woman.h”循環引入的問題;
#import “”引入類的接口部分,容易造成循環引入;
@class只會告訴編譯器后面的字符是一個類名。並不會引入類的接口部分。使用@class聲明類后,要使用類中方法,需要在.m文件引入。
