ViewController.h
@property (strong,nonatomic) NSMutableArray *products;
@property (strong, nonatomic) IBOutlet UITableView *tableViewProducts;
我想知道苹果或开发人员推荐的访问实例变量和访问器方法的方法。
我应该使用_instanceVariable还是self.instanceVariable还是应该合成所有的ivars?
方法1
ViewController.m
@synthesize products;
@synthesize tableViewProducts;
@synthesize productCount;
......
UITableViewCell *cell=[tableViewProducts dequeueReusableCellWithIdentifier:@"cellReuseIdentifier"];
productCount.
方法2
ViewController.m
UITableViewCell *cell=[_tableViewProducts dequeueReusableCellWithIdentifier:@"cellReuseIdentifier"];
方法3
ViewController.m
UITableViewCell *cell=[self.tableViewProducts dequeueReusableCellWithIdentifier:@"cellReuseIdentifier"];
答案 0 :(得分:2)
您现在还不需要使用@synthesize
多年,因此请不要添加这些内容。
由于您拥有属性,因此请访问属性,而不是基础实例变量。
这意味着您的第3个选项是最佳选择。
答案 1 :(得分:2)
始终使用访问器方法访问属性,因此请始终使用self.property
等。除了init
(和initWithWhatever
等)方法之外,您应始终直接访问支持变量_property
等。这是为了避免在self
完成初始化之前访问self
的副作用。
您总是希望使用self.property
的原因是因为它可以产生有用的副作用。可以重写访问器方法以验证值,触发KVO效果(例如自动更新视图),如果未设置特定值则使用默认值等等。如果直接使用支持变量,则会绕过这些。
答案 2 :(得分:0)
现在您不需要@synthesize
属性。由于您已经定义了属性,因此您甚至不需要使用实例变量,只需将属性本身用作self.instanceVariable
。
答案 3 :(得分:0)
您不需要@synthesize
所有属性。但可以@synthesize
属性创建自定义Setter方法。
self.propertyName
将触发此setter方法& _propertyName
不会触发。
示例:强>
<强>·H 强>
@property(string, nonatomic) NSString *name;
<强>的.m 强>
@synthesize name = _name;
- (void)setName:(NSString *)name {
_name = name;
}