对于下面的代码,如果我用“self”取消指标,如果不使用 self 而不是崩溃,它会崩溃。
这不是我应该始终使用“self”来访问由@property 创建和保留的ivars 的规则吗?
@property(nonatomic,retain) UIActivityIndicatorView* activityIndicator;
if(activityIndicator!=nil){
[activityIndicator removeFromSuperview];
//self.activityIndicator = nil; //crashes!
activityIndicator = nil; //does not crash
}
最佳答案
一般来说:
self.activityIndicator = nil; //crashes!
将
release
activityIndicator,所以这可能与崩溃有关。 activityIndicator = nil; //does not crash
不会释放事件指示器,你没有崩溃,你有内存泄漏。
在您的具体情况下,崩溃可能取决于您执行此操作时的事实:
[activityIndicator removeFromSuperview];
事件指示器被释放;现在,如果保留计数也变为 0,则对象也将被释放,但不会更新属性以反射(reflect)对象已被释放的事实。因此,当您将其设置为 nil 时,setter 会尝试释放它,但对象不再存在,因此崩溃。
这是一个猜测。如果您在类里面正确保留了事件指示器,则不会发生这种情况。因此,您可以查看创建事件指示器的代码以及代码中使用
activityIndicator
的位置。或者你发布它以获得更多帮助......
关于iphone - UIActivityIndicatorView nillify 使其崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6938610/