ARC分配实例变量init或awakeFromNib

时间:2015-10-18 16:59:20

标签: objective-c cocoa automatic-ref-counting

我正在尝试在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 instantiation .m文件

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:添加了单例实例

1 个答案:

答案 0 :(得分:0)

感谢您的投入。我创建了一个绝对最小的沙箱项目,我发现我的一个父NIB中有一个对象,它与MyViewController的类型相同,导致了这个问题。关闭此问题,因为它太具有针对性。在init中初始化变量的基本问题是可以的。