|
解決的辦法就是使用一個(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è)被使用的對(duì)象處于活動(dòng)狀態(tài)是正確的。 DetailViewController 會(huì)在退出塊后retainCount=0,才被釋放。 釋放被延遲了。 autoreleasepool 的一個(gè)優(yōu)點(diǎn)。 |
|
|