0

在 Ruby 中,我可以为任何对象定义方法:

jack = "jack"
def jack.say_hi
 puts "hi, I'm #{self}"
end
jack.say_hi

是否可以在 Objective-C 中做同样的事情?如何?

4

1 回答 1

5

简单的回答:没有。

没有简单的方法可以动态地将方法添加到类的一个特定实例。如果您放弃动态执行此操作的要求,并且仅针对一个实例执行此操作,那么您可以使用一个类别- 这是一种将方法添加到现有类的编译时方式,因此该类的所有实例。

复杂的答案:是的。

在 Objective-C 中,运行时提供了一组函数来做任何事情,您可以动态创建新类,向它们添加方法,并动态更改实例的类。使用诸如此类的工具,您可以实现与 Ruby 代码等效的功能。Objective-C键值观察(KVO) 机制建立在这些特性之上。

以这种方式使用运行时函数是一项艰巨的任务,最好接受 Objective-C 和 Ruby 在这方面有不同的模型,并尝试使用 Objective-C 语言模型重新设计您想要做的事情。但是,如果您真的想尝试这个查找“Objective-C 运行时参考”并享受!

高温高压

于 2013-07-04T04:03:39.577 回答