NSMulabrearray泄漏的块(弧)[英] Blocks inside NSMutableArray leaking (ARC)

本文是小编为大家收集整理的关于NSMulabrearray泄漏的块(弧)的处理方法,想解了NSMulabrearray泄漏的块(弧)的问题怎么解决?NSMulabrearray泄漏的块(弧)问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我有一些在块内的操作.此操作仅更新如下所示:

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

我的图像是通过使用NSURLConnection访问Internet来计算的.当我从Internet收到图像时,我称之为NSMutableArray内部的块.到目前为止,一切都很好.我的问题是,当我有多个具有相同URL的图像而不是制作多个呼叫时,我只是在处理连接的类中添加一个新块到NSMutableArray.这样,我制作一个单一呼叫,并更新共享URL的多个图像.一切正常,问题是我正在泄漏块.我将这样的块添加到NSMutableArray:

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

这是初始化连接类时.这是我需要向NSMutableArray添加新块时(我只添加它,它是它):

[arrayOfBlocks addObject:completion];

这是我最终收到回电的时候,并开始执行块:

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

问题是,这是以某种方式泄漏.我无法使用版本或自动发布来抵消,因为我正在进行弧环境.那么解决方案是什么?


在此输入图像描述

推荐答案

这是Apple框架中的众所周知的泄漏.它不是由您使用块引起的.

这里是上一个问题关于它和<一个href ="http://openradar.appspot.com/11081198"rel ="nofollow noreferrer"> bug报告.

其他推荐答案

块保留"self",我猜测"self"保留块(通过'arrayofblocks'属性).如果保留该属性,则您有一个循环参考和泄漏.我不认为arc掌握循环引用,所以你应该在完成它后清空块数组(或将属性设置为NIL),并确保没有其他引用块.

本文地址:https://www.itbaoku.cn/post/924360.html