我开始处理NSOperations并且(和通常一样)我正在观察奇怪的行为。 在我的班上,我有一个实例变量:
NSMutableArray *postResultsArray;
当按下UI中的一个按钮时,我初始化数组:
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];
}
但问题是相同的(但错误是同步操作)。
任何想法我可能做错了什么?
答案 0 :(得分:2)
postResultsArray = [NSMutableArray array];
[NSMutableArray array]
是一种方便的方法,相当于[[[NSMutableArray alloc] init] autorelease]
。所以那里有隐式(自动)版本。由于你要保留它,你必须使用以下3个变化之一:
postResultsArray = [[NSMutableArray array] retain];
postResultsArray = [[NSMutableArray alloc] init];
利用setter应该保留新值的事实(如果你声明为@property(retain)
):
self.postResultsArray = [NSMutableArray array];