【发布时间】:2014-03-20 15:56:12
【问题描述】:
如果我这样做可以吗:
-(void)example{
__weak __typeof__(self) weakSelf = self;
dispatch_queue_t dispatchQueue = dispatch_queue_create("q_getRestaurants", NULL);
dispatch_async(dispatchQueue, ^{
dispatch_async(dispatch_get_main_queue(), ^{
[weakSelf doSomething];
});
});
}
-(void)doSomething{
//can i use self inside this method????
self.view.backgroundColor = [UIColor redColor];
}
问题是我想知道如果我在 do something 方法中使用 self 是否可以,该方法是从具有弱自我调用的队列中调用的。
【问题讨论】:
-
你是说在“//Call something from server”部分你想引用
self? -
不,问题是我是否可以调用 [weakSelf doSomething] 并在 doSomething 方法中使用 self
-
是的,你可以。在一个方法(除了 init 之外)中,您可以保证 self 始终是一个有效值。如果 self 已被释放,并且 weakSelf 自动设置为 nil,那么
[weakSelf doSomething];将不做任何事情并且不会实际调用 doSomething。 -
@David:你可以保证
self(像所有参数一样)在方法的开头指向一个有效值。不晚。
标签: ios objective-c automatic-ref-counting objective-c-blocks