在实施文件中,所有属性都表示为私有 那么这些之间的区别是什么:
@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
答案 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]