在Cocoa touch类中,我将编写一些这样的代码(其中soundEffects是一个合成的NSArray属性):
ID foo = [self.soundEffects objectAtIndex:1];
一位同事问我要解释为什么上面比这条线更好:
ID foo = [soundEffects objectAtIndex:1];
那么在功能上,这没有什么不同.
我对前者的论点如下:
> self.soundEffects告诉每个其他编码器工作的代码,这是一个iVar,而不是一个局部范围的变量.
>如果我们需要,我们可以在soundEffects getter访问器中放置自定义逻辑.
>没有具体的理由,它在“Obj-C”工作一年后就像在正确的事情上一样.
他接受参数#1和#2为有效,但也给出了对应点:
>这不是只是代码膨胀吗?
>不应该允许一个类直接与自己的iVar交谈,而不用自己调用一个方法(getter)呢?
任何人
解决方法 你的观点1是不正确的:self.soundEffects不是一个ivar,尽管它可能会发生给你一些东西 – 就像你在合成NSArray的情况一样.这反过来又意味着你的观点2是这个问题的关键 – 如果你通过访问器路由所有访问,那么一切都很好地被封装,你可以随时修改实现,而不用担心副作用.
当您使用mutator时也是一个好习惯,因此您可以保持一致的内存管理.
在大多数情况下,我会说,通过self.property路由通过属性的所有东西,并限制直接ivar访问严格内部的东西.不过,我承认在某些情况下 – 特别是对于不使用保留/复制语义的东西,它可能更多的是一种风格偏好.
总结以上是内存溢出为你收集整理的在iOS上的Objective-C中,使用合成的getter时,“self.foo”和“foo”之间的(风格)区别是什么?全部内容,希望文章能够帮你解决在iOS上的Objective-C中,使用合成的getter时,“self.foo”和“foo”之间的(风格)区别是什么?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)