我在公共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创建者是错误还是我遗失了什么?