什么時候在block中不需要使用weakSelf


什么時候在block中不需要使用weakself

問題

我們知道,在使用block時為了避免循環引用,通常需要使用weakself與strongself,例如:

__weak typeof(self) weakself = self;
self doSomeBlockJob:^{
     __strong typeof(weakself) strongSelf = weakself;
    if(strongSelf){
         ........
     }
}

那么什么時候在block里調用self,不需要使用weak self呢?

答:在block本身不被self持有,而被別的對象持有,同時不產生循環引用的時候,就不需要使用weakself了.最常見的代碼就是Uiview的動畫代碼,我們在使用Uiview的 animationWithDuration:animation 方法做動畫的時候,並不需要使用weakself ,因為引用持有關系是:
*UIview 的某個負責動畫的對象持有了block
*block本身持有了self
因為self並不持有block,所以就沒有循環引用產生,因此就不需要使用weakself了

 [UIview animationWithDuration:0.2 animation:^{
     self.alpha=1;
 }];

當動畫結束時,UIView會結束持有這個block,如果沒有別的對象持有block的話,block對象就會被釋放掉,從而block會釋放掉隊self的持有,整個內存引用關系被解除.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM