将活动指示符添加到另一个查看另一个视图的视图时,内存泄漏

时间:2012-05-08 05:26:17

标签: iphone ios ios4 cocos2d-iphone

我正在使用Xcode 4.3.2来开发支持ARC的iPhone应用程序。虽然在项目中导航没有崩溃,但当我看到使用泄漏工具执行项目时,它显示malloc泄漏可能有时候我不知道锄头要解决...

我在项目中使用了以下编码。主题是在加载数据时用另一个视图隐藏视图.....

[NSThread detachNewThreadSelector: @selector(StartActivityIndicator) toTarget:self withObject:nil];



-(void)StartActivityIndicator
{ 
    hideView= [[UIView alloc] initWithFrame: CGRectMake(0,0,320,480)];
    activityIndicator= [[UIActivityIndicatorView alloc] initWithFrame: CGRectMake(148,188, 24, 24)];
    hideView.backgroundColor =[UIColor blackColor];
    hideView.alpha=0.8;
    [hideView addSubview:activityIndicator];
    [self.view addSubview:hideView];
    [activityIndicator startAnimating];  

}

此编码的替代方法是否有任何错误..

当ARC启用时,我们必须处理泄漏或不......

2 个答案:

答案 0 :(得分:1)

当您使用ARC时,您需要将代码放入:

** @ autoreleasepool {

} **

-(void)StartActivityIndicator { 
@autoreleasepool {
    hideView= [[UIView alloc] initWithFrame: CGRectMake(0,0,320,480)]; 
    activityIndicator= [[UIActivityIndicatorView alloc] initWithFrame: CGRectMake(148,188, 24, 24)]; 
    hideView.backgroundColor =[UIColor blackColor]; hideView.alpha=0.8;
    [hideView addSubview:activityIndicator]; 
    [self.view addSubview:hideView];
    [activityIndicator startAnimating];
   }
}

答案 1 :(得分:1)

您无需使用线程来显示动画活动指示器。而不是

[NSThread detachNewThreadSelector: @selector(StartActivityIndicator) toTarget:self withObject:nil];

只需使用

[self StartActivityIndicator];

使用线程很容易导致问题,例如通过访问主线程外部的UI相关类和方法,或者使用声明为非原子的setter,或者忘记添加autoreleasepool等等。除非你必须,否则不要去那里。如果必须,使用宏中央调度而不是创建自己的线程。 :)