无法在Mac上使用ARC的respondsToSelector

在ARC环境中调用respondsToSelector ,出现以下错误消息Automatic Reference Counting Issue No known instance method for selector respondsToSelector:

这是标题

 #import <AppKit/AppKit.h> @class MTScrollView; @protocol MTScrollViewDelegate -(void)scrollViewDidScroll:(MTScrollView *)scrollView; @end @interface MTScrollView : NSScrollView { } @property(nonatomic, weak) id<MTScrollViewDelegate>delegate; @end 

这是执行文件

 #import "MTScrollView.h" @implementation MTScrollView @synthesize delegate; - (void)reflectScrolledClipView:(NSClipView *)aClipView { [super reflectScrolledClipView:aClipView]; if([delegate respondsToSelector:@selector(scrollViewDidScroll:)]) { [delegate scrollViewDidScroll:self]; } } @end 

任何build议,为什么我得到这个错误?

使协议符合NSObject

 @protocol MTScrollViewDelegate <NSObject> 

否则,编译器不会认为该对象会响应像respondsToSelector这样的NSObject消息,并会产生一个警告。 它将在运行时成功,没有任何问题。

对于Swift,这成为:

 @objc protocol MTScrollViewDelegate: NSObjectProtocol 

NSObject协议对所有Objective-C对象的基本方法进行分组。

有关NSObjectProtocol的更多信息: https : //developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Protocols/NSObject_Protocol/index.html