2014-11-14 3 views
2

사용하는 방법이 메서드를 사용하는 방법을 잘 모르겠습니다, 아래 코드를 시도하고 둘 다 예를 반환해야한다고 가정하지만, 나는 다른 것을 관찰하고 있습니다. 누군가 제발 설명해 줄 수 있니? [UILocalNotification setRegion :]은 iOS8에서 새로 추가되었습니다.[NSObject instancesRespondToSelector]

BOOL test0 = [[[UILocalNotification alloc] init] respondsToSelector:@selector(setRegion:)]; 
BOOL test1 = [UILocalNotification instancesRespondToSelector:@selector(setRegion:)]; 

디버그 창으로 테스트 값을 보여줍니다

test0 = (BOOL)YES; 
test1 = (BOOL)NO; 
+0

가능한 복제본 [Objective-C에서 instancesRespondToSelector와 respondsToSelector의 차이점은 무엇입니까?] (http://stackoverflow.com/questions/11574478/what-is-the-difference-between-instancesrespondor) – Rick

+1

두 번째에 할당 한 후에'init'-ing하지 않고'NO'를 설명합니다. 인스턴스가 없으면 선택기에 응답 할 수 없습니다. – Todd

+0

instancesRespondToSelector는 클래스 메서드 (signature is : + instancesRespondToSelector :)입니다. Apple에 따르면 : 수신기의 인스턴스가 주어진 선택자에 응답 할 수 있는지 여부를 나타내는 부울 값을 반환합니다. – Mahakala

답변

3

하나를 이해하는 두 개의 클래스 메소드이며, 인스턴스 메소드, 다른 하나는, 내가 어떻게 (또는 왜) 이해할 수 없었다 동안 다른 대답을 반환합니다. 혼란에 빠지면 내가 할 경우

BOOL test2 = [[[[UILocalNotification alloc] init] class] instancesRespondToSelector:@selector(setRegion:)]; 

그렇다면 대답은 YES입니다! 그래서 확인하고, 당신이 ALLOC 초기화에 의해 반환 된 객체의 클래스를 보면, 그것은 다른 :

UILocalNotification *local = [[UILocalNotification alloc] init]; 
NSLog(@"%@", NSStringFromClass([local class])); 
NSLog(@"%@", NSStringFromClass([UILocalNotification class])); 

반환 : 답변이 다를 오는 방법을 설명

2014-11-14 12:48:14.990 Test[6750:22555] UIConcreteLocalNotification 
2014-11-14 12:48:14.991 Test[6750:22555] UILocalNotification 

.

+0

좋은 대답입니다. 이제는 의미가 있습니다. 문서에서 UILocalNotification이 인터페이스라고 언급하는 것이 좋을지라도. 감사. – Mahakala

+0

문서에 관한 합의. 나는 UILocalNotification.h에서 아무것도 볼 수 없었다. – pbasdf