我正在使用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/

10-11 20:02