2011-05-05 42 views
0

最近從蘋果的一些例子看起來是這樣的:爲什麼別名爲新名稱並明確釋放IBOutlet屬性?

@interface ViewController : UIViewController 
{ 
    **// Notice no more ivar here.** 
} 

@property (nonatomic, retain) IBOutlet UIWebView *webView; 

@end 

@implementation ViewController 
@synthesize webView = _webView; 

... 

- (void)dealloc 
{ 
    [_webView release]; 

    [super dealloc]; 
} 

我的問題是,爲什麼走樣webView_webView,並在dealloc上映以來,就沒有伊娃命名_webView

還有一個問題,如果我宣佈,有沒有相關的實例變量的屬性,我需要釋放它在dealloc

+0

可能重複:[1](http://stackoverflow.com/questions/5659156/)[2](http://stackoverflow.com/questions/5582448/)[3](HTTP://計算器。 com/questions/3521254 /)[4](http://stackoverflow.com/questions/2371489/)[5](http://stackoverflow.com/questions/822487/)[6](http:// stackoverflow .COM /問題/ 837559 /) – 2011-05-05 18:26:58

回答

1

當你@synthesize不具有關聯伊娃(不管你說@synthesize property@synthesize property=_property)的屬性,爲您生成伊娃。默認情況下,爲財產本身使用伊娃相同的名稱。如果該屬性爲retain屬性,那麼您必須release-dealloc中的對象,否則您將發生內存泄漏。

蘋果的慣例是用一個下劃線來命名ivars(無論是在接口中明確聲明還是隱式地在@synthesize中聲明)以指示ivar的私有屬性。國際海事組織確保人們只在意欲使用伊娃時也很有幫助(因爲對於某些程序員來說,似乎很容易意外鍵入myproperty,意思是self.myproperty,這可能會產生重大缺陷)。

最後一個問題的答案基本上是肯定的,儘管技術上答案是'有時'。如果存在保存在伊娃裏的對象,則只需釋放該對象。這是大部分時間。然而,屬性只是調用名爲'myproperty'和'setMyproperty'(等)的方法的一個快捷方式,所以可能有一對具有這些名稱的方法和一個實際上沒有ivar配對的關聯屬性。但是,如果您使用retain屬性聲明屬性併合成屬性,則應始終釋放它們的ivars指向的對象。

相關問題