id <protocol> someObject和NSObject <protocol> * someObject之间的区别

时间:2016-06-20 03:27:33

标签: ios protocols nsobject

有三种协议实现:

第一个:

@protocol FirstProtocol
...
@end

@property(nonatomic, weak) id<FirstProtocol> delegate;

第二个:

@protocol SecondProtocol<NSObject>
...
@end

@property(nonatomic, weak) id<FirstProtocol> delegate;

第三个:

@protocol SecondProtocol
...
@end

@property(nonatomic, weak) NSObject<FirstProtocol> *delegate;

我只知道“<NSObject>NSObject<protocol>”可以让委托调用NSObject选择器。 但我不知道它们之间有什么区别。哪一个是最好的实践。

1 个答案:

答案 0 :(得分:1)

您声称可以在delegate上调用哪些方法。

id<FirstProtocol>中,唯一受支持的方法是FirstProtocol中指定的方法。

id<SecondProtocol>中,支持的方法是SecondProtocolNSObject protocol中指定的方法。这样,您就可以访问-class-superclass-isEqual:-hash-self以及NSObject协议中的所有其他方法。< / p>

NSObject<FirstProtocol>中,对象必须是NSObject种类。它可以访问-copy-mutableCopy以及取决于NSObject类的所有其他内容。