无法在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