標籤:

NSObject學習1

NSObject構架協議與類

·包含協議: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:學習 |