在处理自动合成属性时如何使用dealloc?

时间:2013-02-27 08:35:26

标签: ios objective-c dealloc

我对iOS开发比较陌生,所以如果这是一个迟钝的问题,请原谅。我读过this但仍然有点困惑。

我没有使用ARC。 (是的,我知道我应该,但我现在不在这里)在我的班级标题中我有这个

/*-----------------------------------------------------------------------+
 | The name of the sender/receiver
 +-----------------------------------------------------------------------*/
@property (nonatomic, retain) NSString *name;

我不会合成这个变量,而是让编译器完成这项工作。

以下哪项被认为是dealloc方法

的最佳做法

#1 Dealloc the iVar

-(void) dealloc {
   [_name release];
   [super dealloc];
}

#2 Dealloc the property

-(void) dealloc {
   [self.name release];
   [super dealloc];
}

#3 最后一个问题。习惯是在property方法中将nil设置为dealloc吗?即。

-(void) dealloc {
   [self.name release];
   self.name = nil;
   [super dealloc];
}

如果有人能向我解释,我真的很感激。

问候!

2 个答案:

答案 0 :(得分:2)

Jeff Lamarche撰写了一篇关于在dealloc中发布变量的好文章: http://iphonedevelopment.blogspot.nl/2010/09/dealloc.html

他建议永远不要使用self.语法,因为它可能会在多线程环境中导致问题。

他的建议是使用iVar并在生产版本中设置为nil

-(void) dealloc {
   [_name release], _name = nil;
   [super dealloc];
}

答案 1 :(得分:0)

方法1:

使用它是安全的。在dealloc方法中释放iVar没有任何害处。但是,当您将值分配给name时,它必须通过property或通过alloc方法(而不是工厂方法)。

方法2:

发布时,请勿使用属性。

方法3:

不要使用属性,但你肯定可以将nil分配给ivar。