为什么self可以在实现方法或类方法中使用?自我的内部结构是什么?例如:
#import "Person.h"
@implementation Person
+ (void)initialize
{
[super initialize];
[self setupModel];
}
- (instancetype)init
{
self = [super init];
if (self) {
[self test];
}
return self;
}
+ (void)setupModel
{
NSLog(@"setup a person object");
}
- (void)test
{
NSLog(@"this method is called");
}
@end
代码运行结果: 2018-09-17 09:32:40.615578 + 0800 Test [662:301213]设置一个人对象 2018-09-17 09:32:40.615662 + 0800 Test [662:301213]此方法称为
答案 0 :(得分:1)
这些是实现细节,因此您不应依赖它们:
self
是tagged pointer或指向以isa
字段开头,然后包含对象的所有实例变量的结构的真正指针。
isa
字段本身就是一个set of bitfields,其中包含实例的“保留”容器,一些标志以及一个指向实例Class
的指针,或者(在较旧的版本和32-位平台),它只是实例的Class
的指针(在这种情况下,保留计数存储在全局哈希表中)。