2013-08-21 57 views
0

這裏是我的一個視圖控制器初始化函數:編寫正確的初始化函數在IOS

- (id) initWithStartup: (NSDictionary *) _startup investor: (NSDictionary *) _investor chat_id: (NSString *) _chat_id chat_name: (NSString *) _name 
{ 
    self = [self initWithNibName: @"PLNewChatViewController" bundle: nil]; 

    if(self) 
    { 
    } 

    return self; 
} 

是正常/必須具備以下條件:

self = [self initWithNibName: @"PLNewChatViewController" bundle: nil]; 

如若XIB文件中加載自動?

+3

首先,它應該是自我= [超級.....]答案是,這取決於。這是做這件事的正確方法之一。 – ChrisCM

+1

如果您只是調用'[super init]',它應該從主包中選擇合適的名稱,假設XIB與類名稱相同。 –

回答

1

所以,問題名稱:編寫正確的初始化函數在IOS

規則在子類編碼初始化:

  1. 你應該調用超類的指定初始化在您指定的初始化
  2. 你應該打電話給你從其他初始化指定初始化
  3. 爲什麼要使用「_」的方法名稱的字符,並在參數的名稱,在Objective-C使用駱駝
  4. 你應該重載超指定的初始值設定項,它應該調用你指定的初始值設定項(因爲客戶端可以看到super的初始化項)
  5. 如果你繼承了UIView,當你的視圖對象隨後從nib文件加載時,不會調用指定的初始值設定項。所以,你應該覆蓋的initWithCoder兩種方法:和 - (ID)initWithFrame:方法(的CGRect)aRect
  6. 當你打電話給你的初始化方法類的一些方法,它可以是不安全的。因爲這些方法可以在你的類的子類中重寫。 (您不能標記你的方法,最後,就像在Java中)所以,要小心

https://developer.apple.com/library/ios/documentation/general/conceptual/devpedia-cocoacore/MultipleInitializers.html

https://developer.apple.com/library/ios/documentation/general/conceptual/CocoaEncyclopedia/Initialization/Initialization.html