나는 다음과 같은 코드가 있습니다클래스가 NSArray가 아니라 __NSArrayI 인 반면 NSArray의 인스턴스를 만들었습니까?
2016-08-18 21:08:53.628 TestUse[9279:939745] anArrayClass - __NSArrayI
2016-08-18 21:08:53.629 TestUse[9279:939745] NSArrayClass - NSArray
가 그럼 난 CAJTestClass
라는 테스트 클래스를 생성하고 인스턴스를 생성 :
id anArray = [NSArray arrayWithObjects:@1, @2, nil];
NSLog(@"anArrayClass - %@", [anArray class]);
NSLog(@"NSArrayClass - %@", [NSArray class]);
을 내가 모두 출력 NSArray
있습니다 기대, 그러나 출력은 밝혀 그 클래스 :
id testInstance = [CAJTestClass new];
NSLog(@"testInstanceClass - %@", [testInstance class]);
NSLog(@"cajTestClass - %@", [CAJTestClass class]);
이번에 출력된다 :
,2016-08-18 21:08:53.629 TestUse[9279:939745] testInstanceClass - CAJTestClass
2016-08-18 21:08:53.629 TestUse[9279:939745] cajTestClass - CAJTestClass
이번에는 내가 예상 한 결과입니다. 그러나 일 수있는 이유는 무엇입니까?
"Effective Objective-C"에 대한 설명은 NSArray
이 "클래스 클러스터"의 일부분이라는 것입니다.이 클래스는 상속 관계가있는 일련의 클래스입니다. 그러나 CAJTestClass
은 NSObject
의 하위 클래스이기도합니다. 내가 잘못?
편집 : 답장을 보내 주셔서 감사합니다. 그러나 "클래스 클러스터"의 업무에 기여해야한다면이 두 가지 사례에서 다른 결과가 나오는 이유는 무엇입니까?
OP는 왜 [anArray class]와 [NSArray class]가 다른 결과를 반환하는지 알고 싶어합니다. – rmaddy
그것이 원래의 질문이었습니다. (다른 답변에서도 잘 대답했습니다.) 그러나 편집은 NSArray에 대한 한 가지 이유가 무엇인지에 대한 질문 이었지만 CAJTestClass에 대한 또 다른 방법이었습니다. 이유는'CAJTestClass' 케이스가'NSArray'와 완전히 다른 코드이기 때문입니다. –
아니요, 두 답변이 서로 다른 이유를 설명하는 답은 없습니다. 그것은 모두'__NSArrayI'가 무엇인지 설명합니다. – rmaddy