新的objective-c。写了一个代码片段来更好地理解初始化机制,最后问了几个问题。
@implementation MyClass
-(id) init
{
if (self) {
i = 5;
NSLog(@"self before init - %@ %p i=%d",[self className], &self, i);
} else {
NSLog(@"self is null???");
}
id someClass = [super init];
NSLog(@"the result of super-init - %@ %p",[someClass className], &someClass);
self = [super init];
if (self) {
NSLog(@"self after init - %@ %p %d",[self className], &self, i);
} else {
NSLog(@"self is null???");
}
return self;
}
i
是一个私有实例变量int
。
结果如下:
2012-12-14 18:01:26.403 Init[1621:303] self before init - MyClass 0x7fff5fbff848 i=5
2012-12-14 18:01:26.405 Init[1621:303] the result of super-init - MyClass 0x7fff5fbff838
2012-12-14 18:01:26.405 Init[1621:303] self after init - MyClass 0x7fff5fbff848 5
真正让我吃惊的是 someClass 的类名是MyClass
.
- 如何
NSObject
知道返回子类实例(不仅仅是类型匹配,它是完全相同的对象)?
我知道init
多次调用并在调用之前初始化实例变量不是很好的形式,init
但我只是在试验。
谢谢。