- (void) doSomething: (id)with {
int a;
a = [with doSomething];
}
编译器如何知道[with doSomething]
将返回什么类型?它是否假设int
,因为这是我分配的?objective-c如何知道匿名对象将返回什么?
- (void) doSomething: (id)with {
int a;
a = [with doSomething];
}
编译器如何知道[with doSomething]
将返回什么类型?它是否假设int
,因为这是我分配的?objective-c如何知道匿名对象将返回什么?
它不知道返回什么类型,因为doSomething可以通过几个不同的类实现不同的返回类型。
我相信编译器会查找具有该名称的所有方法实现,并确保其中至少有一个在上例中返回int。如果没有任何“doSomething”签名返回一个int,它会给出警告。
编译器知道所有当前可见的方法。如果它具有您要发送的消息的类型,则使用该类型。如果它知道所有具有该选择器的多种方法类型,它将任意选择一个,导致警告和可能的错误。如果它不知道任何此类方法的类型,则会假定该方法返回id
。