2015-10-18 82 views
-1

我想在我的init方法中初始化一個變量,但是當調用鏈達到awakeFromNib時它似乎被釋放。我讀過幾個線程和太多似乎共享相同的困惑 - 這一點應該是非常簡單明瞭... :(ARC分配實例變量init或awakeFromNib

- (id)init { 

    self = [super initWithNibName:@"MyViewController" bundle:[NSBundle mainBundle]]; 
    if (self) { 
     self.customObject = [CustomObject currentInstance]; //OK 
    } 
} 


- (void)awakeFromNib { 
    [self.customObject someMethod]; //here self.customObject is nil? 
    //self.customObject = [CustomObject currentInstance]; // Why should I do this here? 
} 

沒有什麼特別之處的聲明,在我.m文件有。我不想在awakeFromNib的財產分配不理解背後的原因。

@property (strong) CustomObject *customObject; 

CustomObject實例.m文件

static CustomObject customObject; 

@implementation CustomObject { 

+ (instancetype)initMockCustomObject { 
    customObject = (CustomObject*)[OCMockObject mockForClass:[CustomObject class]]; 
} 
+ (instancetype)currentInstance { 
    if (customObject == nil) { [NSException raise...]; } 
    return customObject; 
    } 
} 

initMockCustomObject已在AppDelegate中調用。

修改:在init中增加了實際的超級調用initWithNibName方法。 Edit2:添加單例實例

+1

愚蠢的問題,但是你調用'awakeFromNib'之前實際調用的'init'方法嗎?如果是這樣,它是相同的'自我'指針? – rmaddy

+0

是的,是的。我改變了甚至直接使用_customObject。 – Rabiees

+0

'awakeFromNib'狀態的文檔必須調用'[super awakeFromNib]',儘管我懷疑這與這個問題有關。 – rmaddy

回答

0

感謝您的輸入。我已經創建了一個絕對最小的沙箱項目,並且我發現我的父類NIB中有一個對象,它與MyViewController的類型相同,導致此問題。關閉這個問題,因爲它太特定於應用程序。在init中初始化變量的基本問題是OK。