对于我使用@dynamic关键字手动编写的getter / setter的属性,我有以下代码:
@property (nonatomic, retain) NSObject* obj;
@dynamic obj;
-(NSObject*) obj
{
return obj;
}
-(void) setObj:(NSObject*)newObj
{
[obj release];
obj = [newObj retain];
}
我的问题是,如果我从@property声明中删除了retain,编译器会抱怨默认值将被赋值,并且它可能不是我想要的。如果我添加保留,我认为它会被忽略,因为我自己编写了getters / setter?
只是想快速确认一下。
答案 0 :(得分:3)
你是对的,但你的财产声明对于文档来说和你的实现一样多,至少在这种情况下。在某些时候,有人(你在六个月内?)会查看你的.h文件并说:“为什么这个值不被保留?每次运行时它如何不会崩溃或像筛子那样泄漏内存?”
答案 1 :(得分:0)
保留允许您的对象在内存中保留分配,直到您应用
[obj release];
所以,即使你有自己的setter和getter,你需要保留retain以保持你的位置,因为最后你只有一个指向那个位置的指针,这就是为什么编译器会告诉你你可能修改另一个对象或取代对象的位置。
重要的是,在完成使用后,你可以释放内存。