【发布时间】:2010-12-20 21:44:43
【问题描述】:
我正在使用 MBProgressHUB,发现代码的变体 here。
关于我的代码的一些事情:
- 代码在我的 App Delegate 中
- 许多其他类都调用它
- 我将它与异步 NSURLConnection 一起使用
- 我确实不声明它:@property (nonatomic, retain) 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)
异常代码:KERN_PROTECTION_FAILURE at 0x0000000c0 libobjc.A.dylib 0x000027d8 objc_msgSend + 16
1 我的 0x00003120 -[MyAppDelegate setSearchingMode:] (MyAppDelegate.m:363)
2 我的 0x00003458 -[MyAppDelegate connectionDidFinishLoading:] (MyAppDelegate.m:341)
3 基础 0x00032896 -[NSURLConnection(NSURLConnectionReallyInternal) sendDidFinishLoading] + 62
4 基础 0x00032818 _NSURLConnectionDidFinishLoading + 72
在 connectionDidFinishLoading 我调用:
[self setSearchingMode:NO];
我尝试通过为 HUD 制作属性访问器来做到这一点,但无法绕过“[MBProgressHUD alloc] initWithWindow”这一行 - 我不想继续分配 ivar!
谢谢,如果有人可以在这里为我指明更好的方向..
【问题讨论】:
标签: iphone objective-c memory-management