1 類的本質其實也是一個對象(類對象)
2
3 類對象
4 類對象再程序運行時一直存在
5 類對象是一種數(shù)據(jù)結構,存儲類的基本信息:類大小,類名稱,類的版本以及消息與函數(shù)的映射表等
6 類對象所保存的信息在程序編譯時確定,在第一次使用該類的時候加載到內存中
7 類對象代表類,class代表類對象,類方法屬于類對象
8 如果消息的接受者是類名,則類名表示類對象
9 運行時,所有類的實例都由類對象生產(chǎn),類對象會把實例的isa地值修改成自己的地址,每個實例的isa都指向該實例的類對象,
10 從類對象里可以知道父類信息、可以響應的方法等
11 類對象只能使用類方法,不能用實例方法
12
13 例:
14 Person *p = [Person new];
15 p 實例對象
16 Person 也是一個對象(類對象),是Class類型
類對象的獲取
1 1)通過實例對象獲取
2 Dog *dog =[Dog new];
3 Dog *d2 = [Dog new];
4
5 //第一種方法獲取類對象 6 Class c =[dog class];
7 Clsss c2 =[d2 class];
8
9 NSLog(@"%p",c);
10 NSLog(@"%p",c2);
11
12 2)通過類名獲取(類名其實就是類對象)
13
14 Class c3=[Dog class];
15 NSLog(@"%p",c3);
類對象的使用
1 原來使用類名可以做哪些事情?
2 創(chuàng)建對象
3 [Person new];
4 調用類方法
5 [Person test];//test是類方法 6
7 Person *p =[Person new];
8
9
10
11 c1---->Person
12
13 類對象的使用
14 Class c1 =[p class]; //Person15 1)創(chuàng)建實例對象
16 Person *p1= [c1 new];
17 2)調用類方法
18 [p test]; 調用的是實例方法 -動態(tài)的
19 [c1 test]調用的是類方法 +靜態(tài)的
SEL類型
1 SEL:全稱selector表示方法的存儲位置
2
3 Person *p =[[Person allco]init];
4 [p test];
5
6 尋找方法的過程:
7 1)首先把test這個方法名包裝成sel類型的數(shù)據(jù);
8 2)根據(jù)SEL數(shù)據(jù)找到對應的方法地址;
9 3)根據(jù)方法地址調用相應的方法
10 4)注意:在這個操作過程中有緩存,第一次找的時候是一個一個的找,非常耗性能,之后再用到的時候就直接使用
11
12 關于_cmd:每個方法的內部都有一個_cmd,代表著當前方法
13
14 SEL其實是對方法的一種包裝,將方法包裝成一個SEL類型的數(shù)據(jù),去尋找對應的方法地址,找到方法地址就可以調用方法.這些都是運行時特征,發(fā)消息就是發(fā)送SEL,然后根據(jù)SEL找到地址,調用方法
15 //手動的把eat方法包裝成SEL類型16 SEL s1 =@selector(eat);
17 //通過s1去調用了18 [p2 perfomSelector :s1];
網(wǎng)站名稱:OC類的介紹-創(chuàng)新互聯(lián)
地址分享:http://www.rwnh.cn/article20/icpco.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、網(wǎng)站維護、網(wǎng)站排名、全網(wǎng)營銷推廣、微信小程序、品牌網(wǎng)站設計
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內容