是这行代码正确的内存管理(重新NSDate副本)?

时间:2011-05-05 05:13:13

标签: iphone objective-c ios memory-management autorelease

这行代码是否正确重新进行内存管理(重新复制NSDate)?

我有一个属性类:

@property (nonatomic, retain) NSDate* start;
@property (nonatomic, retain) NSDate* coreWeStart;

现在在init方法中,假设已经设置了self.start,这是否正确将coreWeStart设置为相同的日期:

    self.coreWeStart= [[self.start copy] autorelease];

请仔细检查我的理解:

  1. 需要'复制',否则它将引用同一个对象和
  2. 需要自动释放,因为我做了副本
  3. 感谢

2 个答案:

答案 0 :(得分:1)

我会说,但它仍然可以做得更好。具体来说,你可以这样做:

@property (nonatomic, copy) NSDate* coreWeStart;

......然后:

self.coreWeStart = self.start;

...用更少的代码来获得同样的东西。另外,请务必在dealloc(以及self.coreWeStart = nil)中执行self.start = nil

答案 1 :(得分:1)

是的。你说对了。

  • 复制返回一个保留计数为1的新对象。
  • 将其分配给保留关键字属性将增加保留计数。
  • autorelease将减少保留计数。

因此,您的对象具有 coreWeStart 属性,其保留计数为1,这是 start 属性的副本。