-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:添加單例實例
愚蠢的問題,但是你調用'awakeFromNib'之前實際調用的'init'方法嗎?如果是這樣,它是相同的'自我'指針? – rmaddy
是的,是的。我改變了甚至直接使用_customObject。 – Rabiees
'awakeFromNib'狀態的文檔必須調用'[super awakeFromNib]',儘管我懷疑這與這個問題有關。 – rmaddy