分享

objective c 块中对self的引用。

 quasiceo 2015-03-31
 
解决的办法就是使用一个__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.
块内的强引用退出块时会被释放。

如果单纯的在块内引用外部的self,会增加retainCount,而不会释放。



 如果这个 block 被异步调用那么创建一个
强引用保持这个被使用的对象处于活动状态是正确的。

 DetailViewController 会在退出块后retainCount=0,才被释放。
释放被延迟了。
autoreleasepool 的一个优点。
  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多