2016-12-03 5 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")); 
} 

в Objective-C.

Слабый компонент предоставляется компилятором, а не некоторой библиотекой, например std::share_ptr в C++.

Как компилятор реализует слабый ptr, будет ли это что-то вроде этого.

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

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

ответ

1

Слабые указатели в Objective-C предоставлены исполняемой средой objc, которая также является библиотекой. Доступ к содержимому слабого указателя осуществляется, например, objc_loadWeak(). Документация clang о Automatic Reference Counting объясняет детали.

 Смежные вопросы

  • Нет связанных вопросов^_^