我正在使用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启用时,我们必须处理泄漏或不......
答案 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等等。除非你必须,否则不要去那里。如果必须,使用宏中央调度而不是创建自己的线程。 :)