2

对于我使用 @dynamic 关键字手动编写的 getter/setter 的属性,我有以下代码:

@property (nonatomic, retain) NSObject* obj;

@dynamic obj;
-(NSObject*) obj
{
    return obj;
}
-(void) setObj:(NSObject*)newObj
{
    [obj release];
    obj = [newObj retain];
}

我的问题是,如果我从@property 声明中删除保留,编译器会抱怨默认值将被分配并且它可能不是我想要的。如果我添加保留,我认为它将被忽略,因为我自己编写了 getter/setter?

只是在寻找对此的快速确认。

4

2 回答 2

3

你是对的,但是你的属性声明对于文档和你的实现一样多,至少在这种情况下是这样。在某个时候,某人(六个月后的您?)会查看您的 .h 文件并说:“为什么不保留这个值?为什么它不会在每次运行时崩溃或像筛子一样泄漏内存?”

于 2010-10-05T19:24:00.670 回答
0

保留允许您的对象在您申请之前一直分配在内存中

[obj release];

所以即使你有自己的setter和getter,你也需要保留retain以保持你在内存中的位置,因为最后你只有一个指向那个位置的指针,这就是编译器告诉你你可以修改另一个对象的原因或者任何取代你的对象的东西。

重要的是,您在使用完毕后释放内存以释放内存。

于 2010-10-05T19:14:13.157 回答