合成属性时命名实例变量的约定

Ste*_*vin 4 macos objective-c ios

在Objective-C中合成属性时,建议您不要简单地写:

@synthesize window; 
Run Code Online (Sandbox Code Playgroud)

反而

@synthesize window = _window;
Run Code Online (Sandbox Code Playgroud)

原因是你不希望你的实例变量名称与你的getter方法相同或"可能发生坏事".

我总是@synthesize var1, var2, etc在我的应用程序中使用而没有发生"坏事".会发生什么样的坏事?

Abi*_*ern 5

曾经发生过不好的事情,特别是在ARC之前的日子里,当人们将对象分配给存储iVar而不是属性时.如果这是偶然进行的,那么合成的setter隐含的内存管理将不会被应用,从而导致泄漏或过早释放.

我用它来做这个简单的方法,但现在我使用前缀.我不再宣布我的iVar了,我让现代运行时为我照顾.我使用前缀,以便我不会意外地使用像局部变量的iVar.

另外 - 我倾向于self.iVar在我的班级中几乎无处不在地引用我的属性.这样我就可以在我想要的时候使用延迟加载的属性而不用担心哪些属性并且不会延迟加载.