在实现NSArray(类集群)的子类时,我惊讶地发现我的被覆盖的描述方法没有被调用。有人可以解释一下这里发生了什么吗?
@interface MyArrayClassCluster : NSArray
@end
@implementation MyArrayClassCluster
{
NSArray *_realArray;
}
// Implement the class cluser stuff here
- (NSUInteger)count
{
return [_realArray count];
}
- (id)objectAtIndex:(NSUInteger)index
{
return [_realArray objectAtIndex:index];
}
// lifeCycle
- (id)initWithItems:(NSArray *)items
{
self = [super init];
_realArray = [items retain];
return self;
}
- (void)dealloc
{
[_realArray release];
[super dealloc];
}
- (NSString *)description
{
return [NSString stringWithFormat:@"My Custom Array: %p, objs:%@", self, _realArray];
}
@end
int main(int argc, const char * argv[])
{
@autoreleasepool {
NSArray *a = @[@1, @2, @3];
NSLog(@"a: %@", a);
MyArrayClassCluster *clzCluster = [[MyArrayClassCluster alloc] initWithItems:a];
NSLog(@"clzCluster: %@", clzCluster);
}
return 0;
}
输出
2013-01-29 18:52:38.704 ClassClusterTester[31649:303] a: (
1,
2,
3
)
2013-01-29 18:52:38.707 ClassClusterTester[31649:303] clzCluster: (
1,
2,
3
)
答案 0 :(得分:0)
@Rob指向的链接在底部有正确的答案。一个不起眼的事实:如果某些东西实现了descriptionWithLocale :, NSLog会调用它。由于我的类是NSArray的子类,并且NSArray实现了它,因此我的描述版本没有被调用。