Person *p1 = [[Person alloc] init];
//獲取內存中的類對象
Class c = [p class];
Class c1 = [p1 class];
c==c1
//獲取內存中的類對象
Class c2 = [Person class];
c==c1==c2
Person * p = [c2 new]
//默認情況下,利用NSLog和%@輸出對象時,結果是:<類名:內存地址 >
//1,會調用對象p的-descr
iption方法
//2,拿到-description方法的返回值(NSString *)顯示到屏幕上
//3,-description方法默認返回的是“類名+內存地址”
NSLog(@"%@",p);
想輸出對象的詳細信息,只有在該對象實現中重寫-
description方法(
java中是toString方法)
-(NSString *)description//決定實例對象的輸出結果
{
return [NSString stringWithFormat:@"age=%d,name=%@",_age,_name];
}
+(NSString *)description//決定類對象的輸出結果,如果不重寫,默認輸出時該類對象的類名
{
return @“abc”;
}
//當程序啟動的時候,就會加載一次項目中所有的類,類加載完畢后就會調用+load方法(先調用類的load方法,最后才調用分類的load方法)
+(void)load
{
}
//當第一次使用這個類的時候,就會調用一次+initialize方法
+(void) initialize
{
}
分類中也可以由load和initialize方法,load方法加載完畢后被調用,如果類和分類中都有initialize方法,
那么第一次使用這個類的時候就會調用分類中的initialize方法,分類中沒有才會調用類中的+initialize
1,當程序啟動時,就會加載項目中所有的類和分類,而且記載后會調用沒各類和分類的+load方法。只會調用一次
2,當第一次使用某個類時,就會調用當前類的+initialize方法()
3,先加載父類,再加載子類(先調用父類的+load方法,再調用子類的+load方法)
先初始化父類,再初始化子類(先調用父類的+initialize方法,再調用子類的+initialize)