【问题标题】:What's the point of creating classes at runtime in Objective-C?在 Objective-C 中在运行时创建类有什么意义?
【发布时间】:2012-10-16 08:02:43
【问题描述】:

我最近重读了来自 Mike Ash 的有趣的 tutorial 关于如何在 Objective-C Runtime 上创建类

很长一段时间以来,我一直在想在哪里应用该语言的这一强大功能。对于我想到的大多数想法,我总是看到一个矫枉过正的解决方案,最终我继续使用NSDictionary。您在运行时创建类的使用案例是什么?我看到的唯一一个是 Obj-C 解释器...更多想法?

【问题讨论】:

  • 很好的教程...谢谢...顺便说一句,在运行时创建类是非常有用的,请记住,Objective-C 是 C 中的某种 Smalltalk 功能,而在 Smalltalk 中一切都是动态的,甚至是类、方法等……
  • @HolaSoyEduFelizNavidad 非常有用,有什么例子吗? ;-)
  • 比给出案例更好,比如 python、ruby 甚至 smalltalk 等语言,这些语言可以在不停止应用程序的情况下更新应用程序。想象一下,你有一个服务器,你需要添加一个插件或改变一个特性,所以你可以在不停止服务器或更改其二进制文件的情况下完成它......当然,不要考虑一小部分一个应用程序,应用程序本身必须基于这个特性。

标签: objective-c ios runtime objective-c-runtime


【解决方案1】:

当有人需要在运行时创建类时,我看到了一些可能的选项

  • 隐藏有关它的信息(在大多数情况下这无济于事,但...你可以)
  • 执行多重继承(如果你真的需要它:)
  • 使用您自己的语言(即一些类似 XML),可以由您的程序解释,用 Obj-C 编写(类似于 NSProxy,但更好。)
  • 创建一些可以在运行时更改其行为的动态类

一般来说.. 这有一些可能的用途。但在现实世界中,在默认服务应用程序中实际上不需要这样做:)

【讨论】:

  • 执行多重继承实际上是 Obj-C 运行时的一种可能应用,是的!谢谢!直到现在我才看到的最佳答案:-) +1 我留了更多时间来收集更多想法;-)
【解决方案2】:

它可以与 Core Data 或任何与数据库相关的 API 一起使用,以创建在编译时未知的新对象类。但是,我怀疑这是否经常使用,它主要是系统在运行程序时使用的机制......

【讨论】:

  • 从开发的角度来看,我没有看到任何需要在运行时使用运行时创建类和数据库查询。
  • Core Data 不会在运行时创建类。它使用 NSProxy。方法调用被翻译成数据库调用。
【解决方案3】:

在 Cocoa 框架中,KVO 是通过动态创建类的“通知”版本来实现的。见http://www.mikeash.com/pyblog/friday-qa-2009-01-23.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-25
    • 2010-11-15
    • 2016-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多