2015-10-18 77 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。