我有以下代码:
id anArray = [NSArray arrayWithObjects:@1, @2, nil];
NSLog(@"anArrayClass - %@", [anArray class]);
NSLog(@"NSArrayClass - %@", [NSArray class]);
我希望两个输出都是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 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
这一次的结果是我所期望的。但为什么会[anArray class]
成为一个__NSArrayI
?
“Effective Objective-C”的解释是它NSArray
是“类集群”的一部分(我认为这是一系列具有继承关系的类)。但CAJTestClass
也是 的子类NSObject
。我错了吗?
编辑:感谢您的所有回答。但是我的问题是,如果它应该有助于“类集群”的事务,为什么我会在这两种情况下得到不同的结果?