2

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

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

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

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

dealloc以下哪项被认为是该方法的最佳实践

#1释放 iVar

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

#2释放财产

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

#3最后一个问题。是否习惯于在方法中设置propertyto ?IEnildealloc

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

如果有人可以向我解释这一点,我将不胜感激。

问候!

4

2 回答 2

2

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

他建议永远不要使用这种self.语法,因为它会在多线程环境中引起问题。

他的建议是在生产版本中使用iVarand 设置:nil

-(void) dealloc {
   [_name release], _name = nil;
   [super dealloc];
}
于 2013-02-27T08:41:20.883 回答
0

方法一:

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

方法二:

在发布时,不要使用属性。

方法3:

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

于 2013-02-27T08:51:18.567 回答