Iphone 已发送到未释放的解除分配实例的消息

Iphone 已发送到未释放的解除分配实例的消息,iphone,concurrency,Iphone,Concurrency,我开始处理NSO操作,并且(和通常的并发操作一样)观察到奇怪的行为。 在我的类中,我有一个实例变量: NSMutableArray *postResultsArray; 当按下UI中的一个按钮时,我初始化阵列: postResultsArray = [NSMutableArray array]; PostResult *result = [[PostResult alloc] initWithServiceName:@"Sth" andResult:someResult]; [sel

我开始处理NSO操作,并且(和通常的并发操作一样)观察到奇怪的行为。 在我的类中,我有一个实例变量:

    NSMutableArray *postResultsArray;
当按下UI中的一个按钮时,我初始化阵列:

postResultsArray = [NSMutableArray array];
PostResult *result = [[PostResult alloc] initWithServiceName:@"Sth" andResult:someResult];
[self.postResultsArray addObject:result];
和设置操作(以及依赖项)

在操作中,我创建了一个自定义对象,并尝试将其添加到数组中:

postResultsArray = [NSMutableArray array];
PostResult *result = [[PostResult alloc] initWithServiceName:@"Sth" andResult:someResult];
[self.postResultsArray addObject:result];
在添加时,我得到:

-[CFArray retain]:发送到解除分配实例0x3b40c30的消息

这很奇怪,因为我没有在代码中的任何地方释放数组(我释放了,但当问题开始出现时,我对所有释放操作进行了注释,以确保它们不是这样)。我以前也有@synchronized部分,如下所示:

PostResult *result = [[PostResult alloc] initWithServiceName:@"Sth" andResult:someResult];
    @synchronized (self.postResultsArray) {
        [self.postResultsArray addObject:result];
    }
但是问题是相同的(但是,错误是针对同步操作的)

你知道我做错了什么吗

postResultsArray = [NSMutableArray array];
[NSMutableArray]
是一种方便的方法,相当于
[[NSMutableArray alloc]init]autorelease]
。所以这里有一个隐式(自动)释放。因为您要保留它,所以必须使用以下三种更改之一:

  • 利用setter应该保留新值的事实(如果您声明为
    @property(retain)
    ):

  • self.postResultsArray = [NSMutableArray array];