[objective-c] Mac에서 ARC를 사용하여 respondsToSelector를 사용할 수 없음

respondsToSelectorARC 환경에서 전화 하면 다음과 같은 오류 메시지가 나타납니다.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

이 오류가 발생하는 이유에 대한 제안 사항이 있습니까?



답변

프로토콜이 NSObject를 준수하도록합니다.

@protocol MTScrollViewDelegate <NSObject>

그렇지 않으면 컴파일러는 객체가와 같은 NSObject 메시지에 응답 할 것이라고 생각하지 않고 respondsToSelector경고를 생성합니다. 어느 쪽이든 문제없이 런타임에 성공합니다.


답변

Swift의 경우 다음과 같습니다.

@objc protocol MTScrollViewDelegate: NSObjectProtocol

NSObject 프로토콜은 모든 Objective-C 개체의 기본 메서드를 그룹화합니다.

NSObjectProtocol에 대한 자세한 정보 : https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Protocols/NSObject_Protocol/index.html


답변