了解Objective-C 2.0中的实例变量和属性

时间:2013-05-24 02:03:38

标签: objective-c

我的开发环境:

  

Xcode 4.6.2

     

非自动参考计数

例如,假设我们有一个名为CertainViewController的视图控制器,其中已声明名为NSArray *的{​​{1}}类型属性,其属性为listData和{{1} }。 retain将被加载到表视图中。我会这样做:

nonatomic

虽然其他一些开发人员会为属性listData明确指定实例变量// CertainViewController.h @interface CertainViewController : UIViewController { } @property (retain, nonatomic) NSArray *listData; // CertainViewController.m @implementation CertainViewController @synthesize listData; - (void) viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view from its nib. // someValue is ready self.listData = someValue; // Release someValue } - (void) dealloc { self.listData = nil; } ,并且这样做:

_listData

上述两种实现完全相同吗?或者任何微小的差异?显式指定实例变量listData只是意味着使用// CertainViewController.h @interface CertainViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> { NSArray *_listData; } @property (retain, nonatomic) NSArray *listData; // CertainViewController.m @implementation CertainViewController @synthesize listData = _listData; - (void) viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view from its nib. // someValue is ready self.listData = someValue; // Release someValue } - (void) dealloc { [_listData release]; }

欢迎任何提示并感谢您的帮助:D

2 个答案:

答案 0 :(得分:2)

它们基本相同,但如果您想知道确切的区别,请查看文档:{​​{3}}

答案 1 :(得分:2)

使用最新的clang编译器,您不需要声明实例变量,编译器会自动为您执行此操作。

实际上你甚至不需要再宣布@synthesize。一旦声明了@property,编译器就会生成getter,setter和实例变量,就像你写的那样:

@synthesize listData = _listData;