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 解释详细信息。
- (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 解释详细信息。