clang是如何实现weak ptr的?

How does the clang implement the weak ptr?

- (void)test
{
    __weak typeof(self) weakSelf = self;
    [weakSelf test];
}

编译为

static void _I_Foo_test(Foo * self, SEL _cmd) {
 __attribute__((objc_ownership(weak))) typeof(self) weakSelf = self;
 ((void (*)(id, SEL))(void *)objc_msgSend)((id)weakSelf, sel_registerName("test"));
}

在 objective-c.

weakptr 是由编译器提供的,而不是像 c++ 中的 std::share_ptr 这样的库。

编译器是怎么实现weak ptr的,会不会是这样的

-(void)dealloc
{
    self.weakRef = nil;
    ...
}

-(void)test
{
    self.weakRef = new WeakRef(self);
}

Objective-C 中的弱指针由 objc 运行时提供,它也是一个库。访问弱指针的内容由 objc_loadWeak() for instance. The clang documentation about Automatic Reference Counting 解释详细信息。