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

Jak*_*old 5 properties objective-c synthesize

在iOS(cs193p)上观看了斯坦福iTunes U课程,老师明确表示在使用时总是指定ivar名称,@synthesize以避免出现问题,例如

@synthesize name = _name;
Run Code Online (Sandbox Code Playgroud)

但是在浏览声明属性Cocoa文档时,我还没有真正看到过这个,或者在任何其他示例代码中.

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

Ben*_*hen 6

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

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

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