我在关于copyWithZone的苹果文档中读到了:
“返回的对象隐式由发件人保留,负责释放它。”
所以,如果我写这个:
- (id)copyWithZone:(NSZone *)zone {
MyObject* obj = [[[[self class] allocWithZone:zone] init] autorelease];
[obj fillTheObj];
return obj;
}
我打来电话:
MyStuff* obj = [varobj copy];
会保留obj
吗?如果我没有设置自动释放,保留计数怎么样?
答案 0 :(得分:3)
请勿在{{1}}方法中自动发布,否则您将不会拥有它(并且可能无法对其进行任何操作)。
删除自动发布,copyWithZone
将在obj
复制中正确保留。完成后,您只需要MyStuff
。
Apple的一句话是说发件人 - 这是你的release
初始化 - 拥有所有权并需要释放它。 “发件人”是指发送 MyStuff *obj
邮件的对象,而不是copy
方法。