2010-04-11 102 views
1

我开始处理NSOperations和(像平时一样并发)我正在观察奇怪的行为。 在我的课堂我有一个实例变量:消息发送到从未被释放的释放实例

NSMutableArray *postResultsArray; 

当UI一个按钮被按下我初始化数组:

postResultsArray = [NSMutableArray array]; 

和设置操作(与依赖关系一起)。

在我创建一个自定义对象,并尝试添加到阵列的操作:

PostResult *result = [[PostResult alloc] initWithServiceName:@"Sth" andResult:someResult]; 
[self.postResultsArray addObject:result]; 

,并同时加入我得到:

- [CFArray挽留]:消息发送到释放实例0x3b40c30

这是奇怪的,因为我不在我的代码中任何地方释放数组(我做过,但是当问题开始出现时,我评论了所有的发布确保他们不是这种情况)。我也曾经有@synchronized节如下:

PostResult *result = [[PostResult alloc] initWithServiceName:@"Sth" andResult:someResult]; 
    @synchronized (self.postResultsArray) { 
     [self.postResultsArray addObject:result]; 
    } 

但问题是相同的(但是,错误是为同步操作)。

任何想法我可能做错了什么?

回答

2
postResultsArray = [NSMutableArray array]; 

[NSMutableArray array]是其等同于一个[[[NSMutableArray alloc] init] autorelease]方法无限便捷。所以这里有一个隐含的(自动)发布。既然你要保持它,你必须使用这3个变化之一:

  1. postResultsArray = [[NSMutableArray array] retain]; 
    
  2. postResultsArray = [[NSMutableArray alloc] init]; 
    
  3. 利用以下事实:一个setter应该保留新值(如果你声明为@property(retain)):

    self.postResultsArray = [NSMutableArray array]; 
    
+0

是的,就是这样。很高兴知道。非常感谢! – Jakub 2010-04-11 13:12:11

相关问题