可能在非主队列

时间:2015-08-24 12:05:59

标签: objective-c multithreading concurrency thread-safety automatic-ref-counting

我在公共API中多次遇到以下代码风格:

@interface UITextField (SomeFunctionalitySupport)

- (void) someMethod {
    @weakify(self)
    dispatch_async(someConcurrentQueue, ^{
        @strongify(self)
        self.text = @"Some text"
    })
}

@end

鉴于UITextField是UIKit对象,它应该在主队列上释放。据我了解,弱化/强化宏只是一种不用手动声明__weak__strong局部变量并对强者进行条件检查的简洁方法。

但是__strong会增加引用计数,对吧?因此,在块完成之前,我们将有一个更强大的参考。并且块在非主队列上运行。如果在执行块期间强引用成为最后一个怎么办?逻辑上,self'在块完成时被释放。但这不会发生在主队列上,这可能会导致严重的问题。

API创建者是错误还是我遗失了什么?

0 个答案:

没有答案