iOS中的__block 與__weak

block在聲明的時候,會將block中的所有代碼以及用到的變量的值存起來(注意:普通變量則保存變量的值,對象實例則保存指針的地址),所以在不用__block 修飾符時,block內部不會改變普通變量的值,但是會改變實例對象的值(因爲指針指向的是同一塊內存區域);

加上__block 修飾後,在block內部用的變量不是事先保存的,都是臨時獲取的,所以block中對變量進行修改,會導致該變量改變。

__weak 的用途:

對象持有block,會給block 進行retain,而block中用到的對象實例,會給給個對象實例都retain,比如block用到 self就會給self進行一次retain,這樣self和block間形成了循環引用,所以在block用到self時,需要使用被__weak 修改的self:  

__weak typeof(self) weakSelf = self

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章