我有一些 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 环境中。那么有什么解决方案呢?
最佳答案
这是 Apple 框架中众所周知的漏洞。这不是您使用 block 造成的。
这是 a previous question关于它和一个bug report .
关于ios - NSMutableArray 内部的 block 泄漏 (ARC),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10512793/