2

我正在使用 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 时,我们必须处理泄漏与否.....

4

2 回答 2

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];
   }
}
于 2012-05-08T05:35:05.927 回答
1

您无需使用线程来显示动画活动指示器。代替

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

只需使用

[self StartActivityIndicator];

使用线程很容易导致问题,例如在主线程之外访问与 UI 相关的类和方法,或者使用声明为非原子的 setter,或者忘记添加自动释放池等等。除非必须,否则不要去那里。如果必须,请使用大型中央调度而不是创建自己的线程。:)

于 2012-06-25T12:30:15.207 回答