我对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];
}
如果有人能向我解释,我真的很感激。
问候!
答案 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。