0
- (void)test
{
__weak typeof(self) weakSelf = self;
[weakSelf test];
}
編譯到鏗鏘如何實現弱ptr?
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"));
}
在目標c。
weakptr由編譯器提供,而不是像C++中的std::share_ptr
這樣的庫。
編譯器如何實現弱ptr,它會是這樣的。
-(void)dealloc
{
self.weakRef = nil;
...
}
-(void)test
{
self.weakRef = new WeakRef(self);
}