【问题标题】:When does setting an Objective-C property double retain?何时设置 Objective-C 属性双重保留?
【发布时间】:2011-01-16 09:13:27
【问题描述】:

给定以下代码

@interface MyClass
{
   SomeObject* o;
}

@property (nonatomic, retain) SomeObject* o;

@implementation MyClass
@synthesize o;

- (id)initWithSomeObject:(SomeObject*)s
{
   if (self = [super init])
   {
      o = [s retain]; // WHAT DOES THIS DO? Double retain??
   }
   return self
}

@end

【问题讨论】:

    标签: iphone objective-c memory-management retain


    【解决方案1】:

    这不是双重保留; s 只会保留一次。

    原因是您没有在初始化程序中调用合成的 setter 方法。这一行:

    o = [s retain];
    

    保留s并将o设置为等于s;也就是说,os 指向同一个对象。合成访问器永远不会被调用;您可以完全摆脱 @property@synthesize 行。

    如果该行是:

    self.o = [s retain];
    

    或等效

    [self setO:[s retain]];
    

    然后将调用综合访问器,这将再次保留该值。请注意,通常不建议在初始化程序中使用访问器,因此在编写 init 函数时,o = [s retain]; 是更常见的用法。

    【讨论】:

      猜你喜欢
      • 2011-11-03
      • 2023-04-09
      • 1970-01-01
      • 2020-06-19
      • 2013-04-12
      • 2020-01-21
      • 2023-03-30
      • 2012-09-28
      • 1970-01-01
      相关资源
      最近更新 更多