問題一般來自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