2011-12-07 109 views
1

我一直在徘徊如何我可以在我的dealloc方法很长一段时间释放我的保留属性。为了清楚起见,这里是一些示例代码:如何释放保留的属性

@interface MyClass: NSObject 
{ 
    //... 
    NSString *myStr; 
    //... 
} 

@property (retain, nonatomic) NSString *myStr; 
//... 

@end 

@implementation MyClass 

@synthesize myStr; 
//... 

//version 1 of dealloc 
-(void)dealloc 
{ 
    [myStr release]; 
    //... 
} 

//version 2 of dealloc 
-(void)dealloc 
{ 
    self.myStr = nil; 
} 

//... 
@end 

正如你所看到的,在我的示例代码是dealloc方法的两个版本。就我而言,第一个导致机器码比第二个小,因此速度更快。但是我曾经听说,以第二种方式处置保留的财产是一种好习惯,即通过使用self关键字调用setter来将其设置为零。谁能告诉我这些是否都是真的?如果是这样,我应该坚持“好习惯”还是只是让代码更快,而不考虑“好习惯”?

预先感谢您。

回答

2

如果您有选项the first choice is better,因为它不太可能有副作用。但速度问题在任何实际应用中几乎都是无关紧要的。物业访问者的速度与dealloc中的release对你的程序没有任何明显的影响。 (如果没有别的,首先分配一个对象的成本dwarfs any performance gain你可能希望通过削减dealloc发送的一些消息来获得,所以如果你真的担心这个问题,更好的方法就是减少分配。 )

+0

明白了,谢谢。我了解到“self.myStr = nil;”将会是“[myStr release]; myStr = nil;”(这里有两条语句)。所以我认为“[myStr发布]”(单一语句)会更快。顺便说一句,“副作用”,你在这里的意思是什么? – xuxu

+0

@xuxu:KVO通知,对撤消堆栈的更改 - 这类事情。 – Chuck