我正在尝试在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;
static CustomObject customObject;
@implementation CustomObject {
+ (instancetype)initMockCustomObject {
customObject = (CustomObject*)[OCMockObject mockForClass:[CustomObject class]];
}
+ (instancetype)currentInstance {
if ( customObject == nil) { [NSException raise...]; }
return customObject;
}
}
已经在AppDelegate中调用了 initMockCustomObject
。
修改:在initWithNibName
中添加了对init
方法的实际超级调用。
Edit2:添加了单例实例
答案 0 :(得分:0)
感谢您的投入。我创建了一个绝对最小的沙箱项目,我发现我的一个父NIB中有一个对象,它与MyViewController的类型相同,导致了这个问题。关闭此问题,因为它太具有针对性。在init中初始化变量的基本问题是可以的。