Objective-C 中类别的概念是否与 Mixin 的概念相似?如果是,它们有什么相似之处?如果不是,它们有什么不同之处?
Objective-C 中类别的概念是否与 Mixin 的概念相似?如果是,它们有什么相似之处?如果不是,它们有什么不同之处?
据我所知:
我认为Mixins更强大,但由于这是无法比较的事情,所以没有意义。
准确地说:
Ruby版本的Categories与Mixins等效,只需重新打开要扩展的类并扩展它即可。(您可以在Ruby中的任何地方执行此操作,并且它与Categories基本相同)
我不确定Objective-C版本的Mixins等效是什么-有人知道吗?
[更新] 经过更深入的搜索,发现Objective-C没有Mixins的等效物,但是富有创造力的Vladimir Mitrovic创建了一个库,可以有效地实现它。 https://github.com/vl4dimir/ObjectiveMixin
我对是否使用它持有两种看法:有时,如果您使用的语言不支持某些功能,则使用它可能比与其作斗争或尝试从其他语言导入您喜爱的功能更容易。 (“如果您不能使用自己喜欢的编程语言,请喜欢您正在使用的那个”)。
再说,也许这只是我有点自大。整个面向切面编程运动多年来一直在为Java添加功能(但我要补充的是,在JBoss之外几乎没有获得太多关注)。无论如何,弗拉基米尔在他的例子中使用忍者神龟赢得了额外的赞誉。据我所知,类别是为特定类定义的,您不能创建一个类别并将其实现的方法添加到几个类中。
使用mixin,您可以从基类和mixin派生出一个新类,然后实例化这个新类以利用它。
使用category,您实际上是直接添加到基类中,因此该基类的所有实例都可以访问类别提供的功能。