怎么可能

编译错误:

id<NSCoding> response = [[NSObject alloc] init];
id copy = [response copy];

编译成功:
id response = [[NSObject alloc] init];
id copy = [response copy];

编译成功:
id<NSCoding> response = [[NSObject alloc] init];
id copy = [((id)response) copy];
$clang --version
Apple LLVM version 5.1 (clang-503.0.38) (based on LLVM 3.4svn)
Target: x86_64-apple-darwin13.1.0
Thread model: posix

附言代码仅用于演示目的,将引发NSInvalidArgumentException

最佳答案

声明类型为id<SomeProtcol>的变量时,编译器会假定您将仅从协议(protocol)中调用方法。 copy不是NSCoding协议(protocol)的方法。

当然,如果变量只是id,则可以同时调用任何已知类/协议(protocol)中可用的任何方法。

关于ios - 使用和不使用协议(protocol)将选择器发送到id之间有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23345172/

10-09 06:30
查看更多