2016-12-03 112 views
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); 
} 

回答