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
)