Objective - C基礎: 第四天 - 7.類的載入過程

來源:互聯網
上載者:User

在前面, 我們知道了類的本質其實也是一個對象, 是Class類型, 那麼類的載入過程是如何的呢?? 其實類的載入過程非常簡單, 先載入父類然後再載入子類, 而且每一個類就只會載入一次, 下面讓我們來看看~



例子:

#import <Foundation/Foundation.h>@interface Person : NSObject+ (void)load;@end@implementation Person+ (void)load{    NSLog(@"Person-----load");}@end@interface Student : Person+ (void)load;@end@implementation Student+ (void)load{    NSLog(@"Student-----load");}@endint main(){    return 0;}
在main()函數裡, 並沒有調用所設定的類方法, load這個類方法是系統自動調用的, 所以不需要我們自行去調用.


結果:

2015-01-24 14:14:45.451 07-類的本質[10689:1160313] Person----load2015-01-24 14:14:45.452 07-類的本質[10689:1160313] Student----load



從結果, 我們就看的出來, 系統先載入Person, 然後再載入Student.




那如果我們需要監聽它是什麼時候載入呢? 還有一個方法叫做+ (void)initialize, 下面讓我們來看看:

#import <Foundation/Foundation.h>@interface Person : NSObject+ (void)load;@end@implementation Person+ (void)load{    NSLog(@"Person-----load");}+ (void)initialize{    NSLog(@"Person-initialize");}@end@interface Student : Person+ (void)load;@end@implementation Student+ (void)load{    NSLog(@"Student-----load");}+ (void)initialize{    NSLog(@"Student-initialize");}@endint main(){    [[Student alloc]init];    return 0;}


結果:

2015-01-24 14:24:18.588 07-類的本質[10729:1164951] Person----load2015-01-24 14:24:18.589 07-類的本質[10729:1164951] Student----load2015-01-24 14:24:18.589 07-類的本質[10729:1164951] Person-initialize2015-01-24 14:24:18.590 07-類的本質[10729:1164951] Student-initialize

如果我們把main()函數裡的改一下:

int main(){[[Person alloc]init];return 0;}

那麼結果就是:

2015-01-24 14:25:17.760 07-類的本質[10738:1165590] Person----load2015-01-24 14:25:17.761 07-類的本質[10738:1165590] Student----load2015-01-24 14:25:17.761 07-類的本質[10738:1165590] Person-initialize




原因其實很簡單, 在main()函數中, 如果我們有載入到子類的話, 那麼initialize方法就是從父類一直載入到子類, 但如果只用到父類的話, 那麼子類就不會被載入.


load方法詳解: 當程式啟動的時候, 就會載入一次項目中所有的類, 類載入完畢後就會調用+ (void)load方法.
initialize方法詳解: 當第一次使用這個類的時候, 就會載入一次+ (void)initialize方法.





好了, 這次我們就講到這裡, 下次我們繼續~~~

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.