@property
与 ivar相比,a 有一些优点:
内存管理:在幕后它将创建一个设置器,该设置器创建具有正确 内存管理的变量。它将为您省去一些麻烦,因为您可以很容易地看到内存管理是如何完成的(strong
/weak
和retain
/ copy
/ assign
)。
其他类的可访问性:如果你@property
在 .h 中声明你的@synthesize
,在 .m 中声明你的 ivar 将是公共可读和可写的。您可以使用 privat 类扩展来防止这种情况。您甚至可以声明一个@property
公共并通过私有类扩展readonly
在内部声明它们。readwrite
例如:私有财产
// [In the implementation file]
@interface MyClass ()
@property (nonatomic, retain) NSMutableArray* someData; // private!!
@end
@implementation MyClass @synthesize someData
@end
自定义 getter 和 setter:如果您愿意,您仍然可以编写自定义 getter 和 setter,您甚至可以只编写一个 getter 或 setter 并让另一个自动生成@synthesize
。您可以将自定义逻辑写入这样的 getter 和 setter,例如,您可以在 a@property
更改后重新加载 tableview。
自动键值观察 (KVO) 兼容:如果您使用或计划使用 KVO,您只需声明属性即可基本上免费获得它。没有其他事情需要做!
点表示法:如果你有@property
.
self.myIvar = (id) someThing;
[array addObject:self.myIvar];
@synthesize myiVar = _myIvar;