自我的内部结构是什么?

时间:2018-09-14 09:34:22

标签: ios objective-c

为什么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]此方法称为

Code run results

1 个答案:

答案 0 :(得分:1)

这些是实现细节,因此您不应依赖它们:

selftagged pointer或指向以isa字段开头,然后包含对象的所有实例变量的结构的真正指针。

isa字段本身就是一个set of bitfields,其中包含实例的“保留”容器,一些标志以及一个指向实例Class的指针,或者(在较旧的版本和32-位平台),它只是实例的Class的指针(在这种情况下,保留计数存储在全局哈希表中)。