指定@synthesize的ivar名称被认为是多余的还是一种好的做法?

时间:2012-01-09 15:47:30

标签: objective-c properties synthesize

我看过Stanford iTunes U course on iOS (cs193p)老师明确表示在使用@synthesize来避免问题时始终指定ivar名称,例如

@synthesize name = _name;

但在浏览Cocoa documentation on declared properties时,我还没有真正看过这个,或者在其他示例代码中。

这让我想到一个问题,为什么需要这个?将@synthesize与属性名称一起使用是不是很好?是否有任何具体问题可以帮助避免?

3 个答案:

答案 0 :(得分:6)

这样做的原因是为了防止直接访问ivars,从而导致内存管理问题。例如:

正确:self.name = newName; 不正确:name = newName;

属性的getter和setter确保正确处理内存管理。要访问ivars,您必须明确键入前导下划线,这是非常难以做到的。唯一可以直接访问ivars的时间是initdealloc以及getter和setter。

答案 1 :(得分:1)

如果未指定ivar名称,则它将使用与属性相同的名称。所以这两个是等价的:

@synthesize name;
@synthesize name = name;

如果您所做的只是name = name,那么是的,这完全是多余的。

人们指定name = _name之类的东西的原因是为ivar和属性使用不同的名称。这样做的一个原因是你不要在财产和伊娃之间混淆,但坦率地说,如果你不清楚差异,这个小小的调整不会拯救你。

答案 2 :(得分:0)

这绝对不是多余的,因为@synthesize name = _name;具有与@synthesize name;不同的含义。您是否希望以与房产不同的方式命名您的ivars,这在很大程度上取决于个人偏好。两种变体都非常好。