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

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

从书中,当我们定义协议时,我们只是这样写@protocol MyButtonViewDelegate

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

4

1 回答 1

6

@protocol MyButtonViewDelegate 但是和之间有什么区别@protocol MyButtonViewDelegate <NSObject>

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

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

于 2013-09-09T15:14:41.617 回答