对于我的一个类,我有一个“始终在最后创建的对象上保留静态引用”模式。当我创建它的新实例时,应该将静态指针设置为这个新实例。解决方法如下:
static AViewController *actualSelf = nil;
+ (AViewController *) getActualSelf {
return actualSelf;
}
- (AViewController *) init {
self = [super init];
self.title = @"Title";
actualSelf = nil; // Why do I need this line the second time init gets called?
actualSelf = self; // this is the only line which sets actualSelf
return self;
}
- (void)dealloc {
actualSelf = nil;
}
…SOME IMPORTANT MUST BE MISSING, BUT I DON'T KNOW WHAT
- 创建 AViewController a > Init 被调用 > 静态指针设置为
- 创建 AViewController b > 调用初始化 > 静态指针应设置为 b。但是静态指针没有设置为b!它把自己从a设置为 nil!
对象 a 大部分时间在 b 被创建之前被释放。
释放静态变量时是否总是需要将它们重置为零?不,请参阅下面我自己的答案。
如果没有“actualSelf = nil;”行,则通过 ARC 对象 a 在actualSelf 设置为对象 b 的那一刻被释放。