2011-05-05 52 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指向的对象。

相关问题