问题一般来自self = [super init]
。子类Cocoa意味着在某些情况下没有子类ivars?
在情况下,如果我继承NSSomething和我init的方法self = [super init]
返回不同的类的对象,这是否意味着我不能有我自己的ivars在我的子类,只是因为self
将指向不同的类?
欣赏如果我的陈述错误可以带来一些例子。
UPD:使我的问题更加精确。
@implementation Base
-(id) init
{
return [NSNumber numberWithBool:YES];
}
@end
@interface Child : Base
{
int myVeryOwnVar;
}
- (id) init;
- (void) dump;
@end
@implementation Child
- (id) init
{
self = [super init];
myVeryOwnVar = 5;
return self;
}
@end
Child *p = [[Child alloc] init];
[p dump];
这显然坠毁,机上发送消息p
对象,因为它现在NSNumber
不供应转储信息。所以我失去了对myVeryOwnVar的控制,在更糟糕的情况下可能会出现泄漏和崩溃。
基本上NSNumber的是一个例外,因为它可以在某些情况下是指向全局实例(如0和可能1在考虑布尔值时很有意义)。我的答案仍然存在。编辑:没关系,我猜我误解了这个问题。 – 2010-06-03 12:43:30