解決的辦法就是使用一個(gè)__weak變量取代:
__weak DetailViewController *weakSelf = self;
self.animatedView.block = ^( CGContextRef context, CGRect rect,
CFTimeInterval totalTime, CFTimeInterval deltaTime)
{
DetailViewController *strongSelf = weakSelf;
if (strongSelf != nil )
{
CGPoint textPoint = CGPointMake((rect. size.width -
textSize.width )/2, (rect.size.height - textSize.height)/2);
[strongSelf. artistName drawAtPoint:textPoint withFont :font];
}
};
塊外的弱引用不增加retainCount.
塊內(nèi)的強(qiáng)引用退出塊時(shí)會(huì)被釋放。
如果單純的在塊內(nèi)引用外部的self,會(huì)增加retainCount,而不會(huì)釋放。
如果這個(gè) block 被異步調(diào)用那么創(chuàng)建一個(gè)
強(qiáng)引用保持這個(gè)被使用的對象處于活動(dòng)狀態(tài)是正確的。
DetailViewController 會(huì)在退出塊后retainCount=0,才被釋放。
釋放被延遲了。
autoreleasepool 的一個(gè)優(yōu)點(diǎn)。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點(diǎn)擊舉報(bào)。