-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