0
- (void)test
{
__weak typeof(self) weakSelf = self;
[weakSelf test];
}
は、Objective-Cではclangは弱い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"));
}
にコンパイル。
weakptrは、C++のstd::share_ptr
のようなライブラリではなく、コンパイラによって提供されます。
コンパイラはどのように弱いptrを実装しますか?このようなものでしょうか。
-(void)dealloc
{
self.weakRef = nil;
...
}
-(void)test
{
self.weakRef = new WeakRef(self);
}