我正在使用MBProgressHUB,并且对here找到的代码有所不同。
关于我的代码的一些事情:
该代码在我的应用程序委托中
许多其他的类称之为
我将其与异步NSURLConnection一起使用
我不声明:@property(非原子,保留)MBProgressHUD * HUD;
我不:@synthesize HUD;
(当然,我不会在我的dealloc中释放它)
我使用它如下:
- (void)setSearchingMode:(BOOL)isSearching {
// when network action, toggle network indicator and activity indicator
if (isSearching) {
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
UIWindow *theWindow = [UIApplication sharedApplication].keyWindow;
HUD = [[MBProgressHUD alloc] initWithWindow:theWindow];
[theWindow addSubview:HUD];
//HUD.labelText = @"Connecting";
[HUD show:YES];
} else {
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
[HUD hide:YES];
[HUD removeFromSuperview];
[HUD release];
}
}
- (void)setSearchingText:(NSString *)whatToSay {
HUD.labelText = whatToSay;
}
我相当确定该代码在某处引起内存管理问题。在崩溃日志中,我得到:
异常类型:EXC_BAD_ACCESS(SIGBUS)
异常代码:0x0000000c处的KERN_PROTECTION_FAILURE
0 libobjc.A.dylib 0x000027d8 objc_msg发送+ 16
1我的0x00003120-[MyAppDelegate setSearchingMode:](MyAppDelegate.m:363)
2我的0x00003458-[MyAppDelegate connectionDidFinishLoading:](MyAppDelegate.m:341)
3基础0x00032896-[NSURLConnection(NSURLConnectionReallyInternal)sendDidFinishLoading] + 62
4 Foundation 0x00032818 _NSURLConnectionDidFinishLoading + 72
在connectionDidFinishLoading中,我称:
[self setSearchingMode:NO];
我试图通过为HUD设置属性访问器来做到这一点,但无法绕过“ [MBProgressHUD alloc] initWithWindow”这一行-我不想继续分配ivar!
谢谢,如果有人能在这里给我指出一个更好的方向。
最佳答案
如果您碰巧以下列顺序结束:
[self setSearchingMode:YES];
[self setSearchingMode:NO];
[self setSearchingMode:NO];
由于对
HUD
的悬挂引用,该代码将按照描述的那样崩溃。当您执行[HUD release];
时,请在该行之后添加HUD = nil;
。这不是内存泄漏;这是一个过度发行。或更可能是悬挂的参考。
(当然,我不会在
我的dealloc)
为什么不?如果保留它,则最好将其释放!
关于iphone - 使用MBProgressHUD发生内存泄漏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4494260/