天天看點

黑馬程式員——IOS基礎——OC面向對象七類的深入

------- android教育訓練、java教育訓練、期待與您交流!

類名就是類對象,類對象就是類名

父類:Person

子類:Strudent

分類:Person(MJ)

1.擷取類對象:

>Class c=[Person class];//類方法

>Person *p=[Person new];

  Class c2=[p class];//對象方法

2.類對象調用類方法:

Class c=[Person class];

Person *p =[c new];

1.當程式啟動時,就會附加元件目中所有的類和分類,而且加載後會調用每個類和分類的+load方法,隻會調用一次。

2.當第一次使用某個類,就會調用目前類的+initialize方法

3.先加載父類,再加載子類(+load方法),分類的load是在原來類之後加載

   先初始化父類,再初始化子類(+initialize方法)

[[Student alloc] init];

加載順序:

Person--load

Student--load

Person(MJ)--load

Person--initialize  //先初始化父類

Student-initialize

由此,我們可以在類第一本加載的時候重寫+initialize方法,可以進行監聽

-description/+description方法:NSObject的方法

-(NSString *) description:決定執行個體對象的輸出結果

NSLog(@"%@",p);//<Person: 0x100109e50>列印出Person對象p的所有屬性值。%@:列印出對象
//預設情況下,利用NSLog和%@輸出對象時,結果是:<類名:記憶體位址>
//1.輸出的時候會調用p的-description方法,預設會傳回字元串(NSString *)資料顯示到螢幕上
//2.在NSObject子類Person中重寫
- (NSString *)description
{
	return [NSString stringwithFormat:@"[email protected], name=%@",_age,_name];
}
//再次調用NSLog(@"%@",p);列印:age=20,name=jack
Person *p2=[[Person alloc] init];
p2.age=25;
p2.name=@"Mike";
NSLog(@"%@",p2);//列印出 age=25, name=Mike
           

+(NSString *) description:決定了類對象的輸出結果

Class c = [Person class];
//1.會調用類的+description方法
//2.傳回(NSString *)顯示到螢幕上
NSLog(@"%@",c);//傳回 : Person
           

NSLog的補充:

蘋果文檔Language & Utilities--> Object-c下

init main()
{
	NSLog(@"%d",__LINE__); //輸出行号
	//NSLog輸出C語言字元串的時候,不能有中文
	//NSLog(@"%s",__FILE__); //輸出檔案路徑
	printf("%s\n",__FILE__); //輸出:Users/apple/...../main.m
	NSLog(@"%s\n",__func__); //輸出目前函數名:main

	Person *p = [[Person alloc] init];
	//指針變量的位址
	NSLog(@"%p",&p); //指針變量的位址
	NSLog(@"%p",p); //對象p的位址
	NSLog(@"%@",p); //<類名:對象位址>
}
           

------- android教育訓練、java教育訓練、期待與您交流!