我的开发环境:
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
答案 0 :(得分:2)
它们基本相同,但如果您想知道确切的区别,请查看文档:{{3}}
答案 1 :(得分:2)
使用最新的clang编译器,您不需要声明实例变量,编译器会自动为您执行此操作。
实际上你甚至不需要再宣布@synthesize
。一旦声明了@property
,编译器就会生成getter,setter和实例变量,就像你写的那样:
@synthesize listData = _listData;