解決的辦法就是使用一個__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)的強引用退出塊時會被釋放。
如果單純的在塊內(nèi)引用外部的self,會增加retainCount,而不會釋放。
如果這個 block 被異步調(diào)用那么創(chuàng)建一個
強引用保持這個被使用的對象處于活動狀態(tài)是正確的。
DetailViewController 會在退出塊后retainCount=0,才被釋放。
釋放被延遲了。
autoreleasepool 的一個優(yōu)點。
本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內(nèi)容,請
點擊舉報。