关于objective-c中的代表?

时间:2013-09-09 15:09:19

标签: objective-c

@protocol MyButtonViewDelegate <NSObject>
- (void)buttonView:(MyButtonView*)view buttonPressed:(UIButton*)button;
@end

我是objective-c的新手,我正在根据这本书学习delegate

从本书开始,当我们定义协议时,我们就像这样编写@protocol MyButtonViewDelegate

但是@protocol MyButtonViewDelegate@protocol MyButtonViewDelegate <NSObject>之间的区别是什么。我们为什么需要<NSObject>

1 个答案:

答案 0 :(得分:6)

  

@protocol MyButtonViewDelegate之间的区别是什么?   和@protocol MyButtonViewDelegate <NSObject>

<NSObject>表示协议MyButtonViewDelegate符合the NSObject protocol。也就是说,符合MyButtonViewDelegate协议的任何对象也必须符合NSObject协议。 (你可能没有意识到,但是有一个名为NSObject的协议以及一个同名的类。)所以,如果你有一个符合{{1}的对象},可以安全地调用MyButtonViewDelegate-hash-isEqual:-retain-release等方法。

您可能遇到的每个对象都已符合-isKindOfClass:,因为类NSObject符合协议NSObject。您可能遇到的唯一其他Objective-C基类是NSObject,它也符合NSProxy。因此,在您的协议中添加NSObject可能不会产生真正的影响,但这是明确要求的好方法。