我看过Stanford iTunes U course on iOS (cs193p)老师明确表示在使用@synthesize
来避免问题时始终指定ivar名称,例如
@synthesize name = _name;
但在浏览Cocoa documentation on declared properties时,我还没有真正看过这个,或者在其他示例代码中。
这让我想到一个问题,为什么需要这个?将@synthesize
与属性名称一起使用是不是很好?是否有任何具体问题可以帮助避免?
答案 0 :(得分:6)
这样做的原因是为了防止直接访问ivars,从而导致内存管理问题。例如:
正确:self.name = newName;
不正确:name = newName;
属性的getter和setter确保正确处理内存管理。要访问ivars,您必须明确键入前导下划线,这是非常难以做到的。唯一可以直接访问ivars的时间是init
,dealloc
以及getter和setter。
答案 1 :(得分:1)
如果未指定ivar名称,则它将使用与属性相同的名称。所以这两个是等价的:
@synthesize name;
@synthesize name = name;
如果您所做的只是name = name
,那么是的,这完全是多余的。
人们指定name = _name
之类的东西的原因是为ivar和属性使用不同的名称。这样做的一个原因是你不要在财产和伊娃之间混淆,但坦率地说,如果你不清楚差异,这个小小的调整不会拯救你。
答案 2 :(得分:0)
这绝对不是多余的,因为@synthesize name = _name;
具有与@synthesize name;
不同的含义。您是否希望以与房产不同的方式命名您的ivars,这在很大程度上取决于个人偏好。两种变体都非常好。