这些是制定者和吸气者。
-(NSMutableArray*)contactList
{
return contactList;
}
-(void)setContactList:(NSMutableArray*) aContactList
{
[contactList release];
contactList=aContactList; //its working fine but leaks
// contactList=[aContactList copy];
// If I keep like this getting exception as mutating
// object setting to immutable but it is mutable only.
}
在视图控制器中,在编辑功能中,我将新对象添加到列表中,如此
[tempDetailsObj.contactList addObject:editcontacts];
这里我变异异常
对象设置为不可变但仅可变。
如果我删除复制它的工作正常但我得到泄漏,所以我想将该对象添加到列表中,没有任何异常,它不会产生任何泄漏。
答案 0 :(得分:1)
您可以尝试-mutableCopy
或仅使用-removeAllObjects
已有的参考:
-(NSMutableArray*)contactList
{
return contactList;
}
-(void)setContactList:(NSMutableArray*) aContactList
{
// Either this way:
[contactList removeAllObjects];
[contactList addObjectsFromArray:aContactList];
// Or this way:
[contactList release];
contactList = [aContactList mutableCopy];
}
答案 1 :(得分:1)
对于初学者,您没有获得传递给您的setter的参数的所有权。此外,您还需要复制可变实例,以避免在您之下更改它们。
使用例如这样:
- (void)setContactList:(NSMutableArray *)aContactList {
NSMutableArray *tmp = contactList;
contactList = [aContactList mutableCopy];
[tmp release];
}
但是,为什么不使用声明的属性:
// interface:
@property (nonatomic, copy) NSMutableArray *contactList;
// implementation:
@synthesize contactList;
答案 2 :(得分:0)
我不知道它是否解决了问题,但请尝试以下
而不是
[contactList release]; contactList=aContactList;
尝试回收旧的参考资料
[contactList removeAllObjects]; [contactList addObjectsFromArray:aContactList];
问候