在iOS上的Objective-C中,使用合成的getter时,“self.foo”和“foo”之间的(风格)区别是什么?

在iOS上的Objective-C中,使用合成的getter时,“self.foo”和“foo”之间的(风格)区别是什么?,第1张

概述我已经搜索了许多有关ObjC访问器和合成访问器的问题.这个问题更多是一个“帮我解决问题”的问题;我不希望有一个答案,但我宁愿找专家来衡量这个论点. 在Cocoa Touch类中,我将编写一些这样的代码(其中soundEffects是一个合成的NSArray属性): id foo = [self.soundEffects objectAtIndex:1]; 一位同事问我要解释为什么上面比这条线更好: 我已经搜索了许多有关ObjC访问器和合成访问器的问题.这个问题更多是一个“帮我解决问题”的问题;我不希望有一个答案,但我宁愿找专家来衡量这个论点.

在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”之间的(风格)区别是什么?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1112764.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存