UIActivityIndi​​catorView nillify让它崩溃

时间:2011-08-04 08:54:59

标签: iphone ios

对于下面的代码,如果我通过“self”将指标弄清楚,如果不使用self而不是崩溃,它会崩溃。  不是我应该总是使用“self”来访问由@property创建和保留的ivars的规则吗?

@property(nonatomic,retain) UIActivityIndicatorView* activityIndicator;


if(activityIndicator!=nil){
     [activityIndicator removeFromSuperview];
      //self.activityIndicator = nil;  //crashes!
              activityIndicator = nil;       //does not crash
 }

1 个答案:

答案 0 :(得分:3)

一般来说:

  self.activityIndicator = nil;  //crashes!

release activityIndi​​cator,因此这可能与崩溃有关。

 activityIndicator = nil;       //does not crash

不会释放活动指示器,你没有崩溃,你有内存泄漏。

在具体案例中,崩溃可能取决于执行此操作时的事实:

 [activityIndicator removeFromSuperview];

活动指标已经发布;现在,如果还发生了retain count变为0,那么该对象也会被释放,但该属性不会更新以反映该对象已被释放的事实。因此,当你将它设置为nil时,setter会尝试释放它,但是obejct不再存在,因此崩溃。

这是猜测。如果您在班级中正确保留了活动指示器,则不应该发生这种情况。因此,您要么查看创建活动指示符的代码以及代码中使用activityIndicator的位置,要么发布它以获得更多帮助......