【发布时间】:2010-05-15 17:07:33
【问题描述】:
最近在尝试在这里回答一个问题时,我运行了一些测试代码来查看 Xcode/gdb 如何报告 class clusters 中的实例类。 (见下文)在过去,我预计会看到如下内容:
PrivateClusterClass:PublicSuperClass:NSObject
例如这样(仍然按预期返回):
NSPathStore2:NSString:NSObject
... 对于使用+[NSString pathWithComponents:] 创建的字符串。
但是,使用 NSSet 和子类化以下代码:
- (void)applicationDidFinishLaunching:(UIApplication *)application {
NSSet *s=[NSSet setWithObject:@"setWithObject"];
NSMutableSet *m=[NSMutableSet setWithCapacity:1];
[m addObject:@"Added String"];
NSMutableSet *n = [[NSMutableSet alloc] initWithCapacity:1];
[self showSuperClasses:s];
[self showSuperClasses:m];
[self showSuperClasses:n];
[self showSuperClasses:@"Steve"];
}
- (void) showSuperClasses:(id) anObject{
Class cl = [anObject class];
NSString *classDescription = [cl description];
while ([cl superclass])
{
cl = [cl superclass];
classDescription = [classDescription stringByAppendingFormat:@":%@", [cl description]];
}
NSLog(@"%@ classes=%@",[anObject class], classDescription);
}
...输出:
// NSSet *s
NSCFSet classes=NSCFSet:NSMutableSet:NSSet:NSObject
//NSMutableSet *m
NSCFSet classes=NSCFSet:NSMutableSet:NSSet:NSObject
//NSMutableSet *n
NSCFSet classes=NSCFSet:NSMutableSet:NSSet:NSObject
// NSString @"Steve"
NSCFString classes=NSCFString:NSMutableString:NSString:NSObject
调试器为所有 Set 实例显示相同的类。我知道过去 Set 类集群没有像这样返回。
- 发生了什么变化? (我怀疑这是 Core Foundation 的桥梁变化。)
- 什么类集群报告只是一个通用类,例如NSCFSet 并报告一个实际的子类,例如NSPathStore2?
- 最重要的是,在调试时如何确定 NSSet 集群实例的实际类?
【问题讨论】:
标签: iphone objective-c cocoa foundation core-foundation