ios - NSMutableArray 内部的 block 泄漏 (ARC)

标签 ios nsurlconnection automatic-ref-counting objective-c-blocks

我有一些 block 内的操作。这个操作,只更新一个 UIImage 像这样:

^(UIImage *image) {
            self.myImage = image;
        }];

我的图像是通过使用 NSURLConnection 访问互联网计算的。当我从 Internet 收到图像时,我调用 NSMutableArray 中的那个 block 。到目前为止,一切都很好。我的问题是,当我有多个具有相同 URL 的图像时,我没有进行多次调用,而是向处理连接的类内的 NSMutableArray 添加了一个新 block 。这样一来,我就可以进行一次调用,并更新共享 URL 的多张图像。一切正常,问题是我在漏 block 。我将这样的 block 添加到 NSMutableArray:

 if( (self = [super init]) ) 
    {
        self.connectionURL=url;
        self.arrayOfBlocks=[NSMutableArray array];
        [arrayOfBlocks addObject:completion];
    }
    return self;

这是初始化连接类的时候。这是我需要向 NSMutableArray 添加一个新 block 的时候(我只添加它,仅此而已):

[arrayOfBlocks addObject:completion];

这是我终于收到回电并开始执行 block 的时候:

 for (MyBlock blockToExecute in arrayOfBlocks)
    {
        blockToExecute([UIImage imageWithData:data]);
    }

问题是这不知何故泄漏了。我无法使用发布或自动发布来抵消,因为我在 ARC 环境中。那么有什么解决方案呢?


enter image description here

最佳答案

这是 Apple 框架中众所周知的漏洞。这不是您使用 block 造成的。

这是 a previous question关于它和一个bug report .

关于ios - NSMutableArray 内部的 block 泄漏 (ARC),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10512793/

相关文章:

ios - 模态视图 Controller 关闭时应用程序崩溃

iphone - ASIHTTPRequest 上的多个请求

c++ - C++ 辅助类的潜在 ARC 保留周期?

objective-c - 带有 Web 查询的 MVC

objective-c - 正确使用ARC(自动引用计数)?

ios - 这个委托(delegate)属性是否被强引用?

ios - 我可以在 Swift 中构建 watch 应用程序并将其添加到不是在 Swift 中构建的 iOS 应用程序吗?

ios - NavigationBar 后退按钮不起作用

objective-c - 新iPad导致presentPopoverFromRect上的EXC_BAD_ACCESS

ios - 来自线程的 NSURLConnection 同步请求与异步请求