2011-12-07 156 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