tea*_*bot 16 objective-c mixins
Objective-C类别的概念是否与mixins的概念类似?如果是这样的话:有什么相似之处?不是:有什么区别?
Joh*_*eek 17
据我所知:
要明确答案是否定的 - 它们不一样.
John Calsbeek在接受的答案中概述了这些差异,但我要说的主要区别在于mixins可以在不同的类中使用,而类别总是只扩展一个类 - 它们在定义中声明.
这是关键的区别,因为这意味着这两个功能的用例完全不同.另一种看待它的方式是,如果你从Ruby到Objective-C并且缺少你的mixins,你将不会发现任何类别的喜悦.
mixins的用例是你有一些代码 - 方法和实例变量 - 你想在几个没有公共超类的类中重用它们.你不能用类别做到这一点.
Mixins实际上是在Objective-C中找不到的类型的"多重继承".objective-c中最接近的是协议,就像Java最接近接口一样,但它们既没有实例变量也没有方法体(在Objective-C或java中).因此,您通常会创建辅助类或将代码放在超类中.
objective-c类别的用例是您希望将方法添加到现有类 - 甚至是系统或库类.
我会说mixins更强大,但由于它是苹果与橘子的比较,它将毫无意义.
准确地说:
类似于Ruby的Ruby,就是简单地重新打开要扩展和扩展它的类.(你可以在Ruby的任何地方做到这一点,它实际上与类别相同)
我不确定与Mixins相当的Objective-c是什么 - 有人吗?
[更新]更多的搜索,并没有在Objective-C中没有相当的Mixins,但是进取的弗拉基米尔米特罗维奇已经创建了一个有效地完成它的库.https://github.com/vl4dimir/ObjectiveMixin
关于是否使用它,我有两种想法:有时如果您使用的语言不支持某些内容,则更容易使用它而不是对抗它或尝试从其他语言导入您喜欢的功能.("如果你不能使用你喜欢的编程语言,那就爱上你所爱的那个").
然后,也许这只是对我的一点点嗤之以鼻.整个面向方面的编程运动多年来一直在将功能集中到Java上(但是我可能会在JBoss之外添加很多牵引力).无论如何,弗拉基米尔在他的例子中获得了使用忍者龟的额外荣誉.
在另一个侧节点:作为一个相对的客观-c菜鸟,在我看来,我在整个网络上找到的示例代码中的类别被过度使用.通常的做法是将静态辅助方法添加到带有类别的系统类中,这样就可以很容易地创建一个辅助类来容纳项目中的那些方法,并且在更新系统类或导入时它们的风险会降低别人的图书馆有自己的类别.一个常见的例子是向UIColor添加新的静态颜色方法.为什么不将它们添加到本地类?
我在类别中看到的一个非常好的用法是添加方法,而不是系统类,而是生成类.因此,当您从核心数据对象模型生成类,并且想要添加新构造函数或其他真正属于模型类的方法时,您可以使用类别执行此操作,从而允许您在更改时安全地重新生成模型类你的模特,不会丢失你的工作.
总结: - 忘记类别作为mixins的解决方案 - 类别对核心数据有利,但过度使用和高估
| 归档时间: |
|
| 查看次数: |
2819 次 |
| 最近记录: |