標籤:
構造方法
1.對象建立的原理
new的拆分兩部曲
Person *p = [Person alloc]; 分配記憶體(+alloc)
Person *p = [p init]; 初始化(-init)
合并: Person *p = [[Person alloc] init];
2.init方法的重寫
- (void) init { if(self = [super init]) { _age = 10;//想在對象建立完畢後 成員變數馬上就有一些預設的值 } return self;}
3.自訂構造方法
/** 自訂構造方法一 **/- (id) initWithAge : (int) age { if(self = [super init]) { _age = age; } return self;}/** 自訂構造方法二 **/- (id) initWithAge : (int) age andNo : (int) no { if(self = [super init]) { _age = age; _no = no; } return self}/** 注意 **///傳回值是id類型//方法名都以init開頭
分類
Category
可以給一個類擴充一些方法(不修改原來的代碼)
#import "Person.h"@interface Person (Hy)- (void) show;@end/** 聲明 **///@interface 類名 (分類名稱)//@end
#import "Person+Hy.h"@implementation Person (Hy)- (void) show { NSLog(@"哈哈哈~~!");}@end/** 實現 **///@implementation 類名 (分類名稱)//@end
使用注意:
分類只能增加方法 不能增加成員變數
分類方法實現中可以訪問原來類中聲明的成員變數
分類可以重新實現原來類中的方法 但是會覆蓋掉原來的方法 會導致原來的方法沒法再使用
方法調用的優先順序: 分類(最後參與編譯的分類優先) ---> 原來類 ---> 父類
類的深入研究
類本身也是一個對象 是Class類型的對象 簡稱類對象
Person *p = [[Person alloc] init];
Class c = [p class];
[c test];//c是可以調用 Person裡面的類方法
類的載入和初始化:
當程式啟動時 就會附加元件目中所有的類和分類 而且載入後會調用每個類和分類的+load方法 只會調用一次
當第一次使用某個類時 就會調用當前類的+initialize方法
先載入父類再載入子類(先調用父類的+load方法 再調用子類的+load方法) 先初始化父類再初始化子類(先調用父類的+initialize方法再調用子類的+initialize方法)
Objective-C 構造方法 分類 類的深入研究