属性和实例变量之间有什么区别?

时间:2012-10-21 10:24:59

标签: objective-c

在实施文件中,所有属性都表示为私有 那么这些之间的区别是什么:

  1. MyObj.m
  2. 
    @interface MyObj ()
    
    @property (nonatomic, strong) NSString *name;
    
    @end
    
    @implementation MyObj
    
    @synthesize name = _name;
    
    // Some other codes to use "name" like self.name or _name
    
    @end
    


    2. MyObj.m

    
    @implementation MyObj
    {
        NSString *_name;
    }
    
    // Some other codes to use _name
    
    @end
    

2 个答案:

答案 0 :(得分:3)

在第一个示例中,您将获得为您创建的访问者

- (NSString *)name;
- (void)setName:(NSString *)name;

另请注意,在较新版本的Xcode中,@synthesize是隐含的。

在第二个例子中,你只创建了一个ivar。

除非你有特殊情况,否则使用访问器通常会更好,因为它为你提供了更大的灵活性。

答案 1 :(得分:2)

我建议您始终对所有班级的数据成员使用@property。它们内置了内存管理,因此您不必担心这一点。属性还为使用该类的对象添加语法糖。因此,如果您的班级obj MyObj我可以做

obj.name = @"brianSan";

完全相同
[obj setName: @"brianSan"];

此外,访问name中的obj可以通过obj.name完成,这与[obj name];

相同

当您必须访问对象对象中的方法时,更容易查看obj.prop.subprop.subsubprop而不是[[[obj prop] suprop] subsubprop]