0

在实现文件中,所有属性都表示为私有。
那么它们之间有什么区别:

  1. 我的对象

@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
4

2 回答 2

3

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

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

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

在第二个示例中,您只创建了一个 ivar。

除非您有特殊情况,否则通常最好使用访问器,因为它可以在将来为您提供更大的灵活性。

于 2012-10-21T10:28:53.433 回答
2

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

obj.name = @"brianSan";

这将与

[obj setName: @"brianSan"];

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

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

于 2012-10-21T10:42:18.837 回答