访问实例变量和方法的推荐方法是什么?

时间:2017-08-16 05:57:43

标签: ios objective-c

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"];

4 个答案:

答案 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;
}