在Ruby中,我可以为任何对象定义方法:
jack = "jack"
def jack.say_hi
puts "hi, I'm #{self}"
end
jack.say_hi
是否有可能在Objective-C中做同样的事情?怎么样?
答案 0 :(得分:5)
简单回答:不。
没有简单的方法可以将方法动态添加到某个特定的类实例。如果您同时删除了动态执行操作的要求以及仅针对一个实例执行此操作,那么您可以使用类别 - 这是一种将方法添加到现有类的编译时方法,以及因此该类的所有实例。
复杂的答案:是的。
在Objective-C中,运行时提供了一组可以执行任何操作的函数,您可以动态创建新类,向它们添加方法,以及动态更改实例的类。使用这些工具可以实现与Ruby代码相当的功能。 Objective-C 键值观察(KVO)机制建立在这些功能之上。
以这种方式使用运行时函数是一件非常重要的事情,最好接受Objective-C和Ruby在这个领域有不同的模型,并尝试使用Objective-C语言重新设计你想要做的事情模型。但是,如果你真的想尝试这个查找“Objective-C运行时参考”并享受!
HTH