我正在经历this link,它有我的问题的答案。但我无法理解正确的人想说些什么。如果有人可以简化并提供解释,那将是非常好的。
答案 0 :(得分:1)
我认为这是一件历史文物。 Objective-C源自C和Smalltalk,它们都不支持重载。
如果要重载,可以使用Objective-C ++。只需使用“.mm”扩展名来命名您的来源,而不只是“.m”。
如果混合使用C ++和Objective-C习语,请务必确保您知道自己在做什么。例如,Objective-C异常和C ++异常是两种完全不同的动物,不能互换使用。
答案 1 :(得分:1)
他想说的是动态类型语言无法实现方法重载,因为在动态类型语言中,每个对象的信息在运行时才会知道。在编译期间静态类型中,可以解决重载。您将只创建具有相同名称的相同函数,但编译器将具有足够的信息来解决它获得的各种调用之间的歧义。但是在动态类型语言中,由于对象仅在运行时解析,因此无法在各种调用之间进行解析。
答案 2 :(得分:1)
在C ++中,编译器具有类型信息,可以根据类型在多种方法之间进行选择。要在Objective C中执行相同的操作,必须在运行时完成,因为由于语言的动态特性(即所有对象都是id
类型),编译器对对象类型知之甚少。虽然这似乎有可能,但在实践中效率非常低。