NSObject學習1
·包含協議:NSObject、NSCopying、NSMutableCopying、NSCoding
·NSObject類默認只實現了NSObject協議,如果用戶需要其他協議功能則需要自己實現該協議。
初始化、析構load+(void) load
作用:類載入到運行時環境時發送該消息
說明:
·在類沒有實例化對象的時候,該函數就已經被調用了
·即使一個類沒有被程序使用,它也會載入到運行時環境
initialize+ (void)initialize;
作用:在類第一次使用的時候發送該消息
說明:父類會被先掉,所以子類initialize函數不需要發送父類initialize消息。
alloc+ (id)alloc;
作用:返回一個已經分配好內存的實例
init- (id)init;
作用:對已經分配了內存的實例進行初始化(相當於構造函數),不一定要默認的構造函數,也可以自己寫(一般就是加一些參數)。
常見形式:
- (id)init{ self = [super init]; //........初始化............... return self; } |
new
+ (id)new;
作用:同時調用了alloc和init。
dealloc- (void)dealloc;
作用:析構函數
拷貝copyWithZone+ (id)copyWithZone:(NSZone *)zone;
作用:拷貝函數。類中重載改函數,copy的時候會調用該函數
說明:
·該函數是NSCopy協議的函數
·c++的拷貝構造函數是把外部的值拷進來,旨在構造。而copyWithZone:函數將自己拷貝一份送給外面,旨在送出拷貝。
sample:
MyClass:NSObject |
MyClass2:MyClass |
-(id)copyWithZone:(NSZone *)zone { MyClass *copy = [MyClass new]; copy->test = self->test; return copy; } |
-(id)copyWithZone:(NSZone *)zone { MyClass2* copy = [super copyWithZone:zone]; copy->test2 = self->test2; return copy; } |
copy
- (id)copy;
作用:發送接收者定義的copyWithZone:nil消息;
mutableCopyWithZone+ (id)mutableCopyWithZone:(NSZone *)zone;
作用:和copyWithZone一樣起拷貝作用;
說明:
·與copyWithZone不同的是它用於返回一個可變類型(如果你希望從一個[不可變類型或可變類型]變成[可變類型],則重載改函數)
·改函數NSMutableCopying協議的函數
mutableCopy- (id)mutableCopy;
作用:調用mutableCopyWithZone:nil
運行時狀態說明:運行時狀態可以在運行時獲得對象的層次關係,確定對象是否實現某寫方法,測試協議等。在寫框架的時候很有用。
class- (Class)class;
+ (Class)class;
作用:返回當前對象所屬類
superclass- (Class)superclass;
+ (Class)superclass;
作用:返回當前對象的父類
isKindOfClass- (BOOL)isKindOfClass:(Class)aClass;
作用:判定receiver是否為aClass或其子類的實例
isMemberOfClass- (BOOL)isMemberOfClass:(Class)aClass;
作用:判定receiver是否為aClass的實例
isSubclassOfClass+ (BOOL)isSubclassOfClass:(Class)aClass
作用:判定是否為aClass的子類
說明:只有類方法
respondsToSelector- (BOOL)respondsToSelector:(SEL)aSelector;
作用:判斷receiver是否響應某消息
注意: 不包括類方法
instancesRespondToSelector+ (BOOL)instancesRespondToSelector:(SEL)aSelector;
作用:判斷類的對象是否響應某消息
注意:不包括類方法
conformsToProtocol- (BOOL)conformsToProtocol:(Protocol *)aProtocol;
作用:判斷是否實現某協議
說明:參數可以用@protocal(協議名稱)製作
description- (NSString*)description;
作用:返回一串對象的描述,描述中包含了對象的詳細信息(方便用於調試)
比較要重載比較最好先重載-(NSComparisonResult)compare:(id)object
hash- (NSUInteger)hash;
作用:返回一串數,代表對象的hash值
isEqual- (BOOL)isEqual:(id)object;
作用:比較兩個對象是否相同
說明:默認是用地址進行比較,且hash值一定要相同
對象編解碼§ 如果對象需要歸檔(保存到文件中)時,我們需要定義編解碼函數,告訴程序對象的哪些屬性需要按什麼順序保存;哪些數據是要讀取的,讀取後存在哪些變數中。
§ 通常需要配合NSArchiver和NSUnarchiver使用
encodeWithCoder- (void)encodeWithCoder:(NSCoder *)aCoder;
作用:定義對象的編碼,即對象的哪些屬性是需要保存下來的
initWithCoder- (id)initWithCoder:(NSCoder *)aDecoder;
作用:定義對象的解碼,即取出的每一條屬性要存放到哪些變數中,進而初始化對象
注意:對象的屬性要retain下來
對象內存管理- (id)retain; //引用次數+1
- (onewayvoid)release; //引用次數-1
- (id)autorelease; //引用次數-1,且向autorelase pool發送消息
- (NSUInteger)retainCount; //返回當前引用次數
說明:詳情見《內存管理》
其他§消息的轉發。forwardInvocation:和相關的方法允許一個對象將消息轉發給另一個對象。
§消息的派發。以performSelector...開頭的一組方法使您可以在指定的延遲後派發消息,以及將消息從輔助線程派發(同步或非同步)到主線程。
NSObject還有幾個其它的方法,包括一些處理版本和姿態(後者使一個類在運行時將自己表示為另一個類)的類方法,以及一些訪問運行時數據結構的方法,比如方法選擇器和指向方法實現的函數指針。
推薦閱讀:
※推薦給你的2個好工具和一個小技巧
※《群書治要360》學習分享(第五十九集)
※終身學習 控制脾氣
※學習恩來精神 踐行「三嚴三實」
※單身女子學習讀本
TAG:學習 |