Objective-c如何知道匿名对象将返回什么?

时间:2010-04-30 01:21:25

标签: objective-c anonymous-types

- (void) doSomething: (id)with {
    int a;
    a = [with doSomething];
}

编译器如何知道[with doSomething]将返回什么类型?它是否假设int,因为那是我要分配的内容?

2 个答案:

答案 0 :(得分:3)

它不确定返回什么类型,因为doSomething可以通过几个不同的类使用不同的返回类型来实现。

我相信编译器会查找具有该名称的所有方法实现,并确保其中至少有一个在上面的示例中返回一个int。如果“doSomething”签名都没有返回int,则会发出警告。

答案 1 :(得分:2)

编译器知道当前可见的所有方法。如果它具有您要发送的消息的类型,则使用该类型。如果它知道所有具有该选择器的多种方法类型,它将任意选择一个,从而导致警告和可能的错误。如果它不知道任何此类方法的类型,它将假定该方法返回id