最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Objective-C中block循環(huán)引用問題詳解

 更新時間:2019年06月17日 08:30:38   作者:二師兄  
這篇文章主要給大家介紹了關于Objective-C中block循環(huán)引用問題的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Objective-C具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

目標:block執(zhí)行過程中,self不會釋放;執(zhí)行完可以釋放。

最初

block中直接使用self會強引用。

self.myBlock = ^() {
 [self doSomething];
};

或者使用了對象的屬性

self.myBlock = ^() {
 NSString *str = _str;
 NSString *str2 = self.str;
};

在這樣的情況下,self強引用block,block也持有該對象,導致循環(huán)引用。

要注意的是,只有在self強引用block的時候才會有這樣的問題。一般使用GCD或NSOperation時使用的內(nèi)聯(lián)block是不會出現(xiàn)循環(huán)引用的。

加入weak self

__weak __typeof(self) weakSelf = self;
self.myBlock = ^() {
 [weakSelf doSomething];
};

這樣,self持有了block,但block對self是弱引用,就不會導致循環(huán)引用了。

而在[weakSelf doSomething]過程中,self是不會釋放的,完美。

但是,如果是這樣呢?

__weak __typeof(self) weakSelf = self;
self.myBlock = ^() {
 [weakSelf doSomething];
 [weakSelf doSomething2];
};

在[weakSelf doSomething]和[weakSelf doSomething2]之間,self可能會被釋放掉。這可能會導致奇怪的問題。

加入strong self

__weak __typeof(self) weakSelf = self;
self.myBlock = ^() {
 __strong __typeof(self) strongSelf = weakSelf;
 [strongSelf doSomething];
 [strongSelf doSomething2];
};

這樣,block既沒有持有self,又能保證block在執(zhí)行過程中self不被釋放,真正達到了最初的目標。

總結

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。

相關文章

  • IOS開發(fā)中加載大量網(wǎng)絡圖片優(yōu)化方法

    IOS開發(fā)中加載大量網(wǎng)絡圖片優(yōu)化方法

    這篇文章主要介紹了IOS開發(fā)中加載大量網(wǎng)絡圖片如何優(yōu)化的相關資料,需要的朋友可以參考下
    2017-03-03
  • IOS中UIImageView方法實現(xiàn)簡單動畫

    IOS中UIImageView方法實現(xiàn)簡單動畫

    這篇文章主要介紹了IOS中UIImageView方法實現(xiàn)簡單動畫的相關資料,需要的朋友可以參考下
    2017-05-05
  • 詳解iOS應用使用Storyboard布局時的IBOutlet與IBAction

    詳解iOS應用使用Storyboard布局時的IBOutlet與IBAction

    這篇文章主要介紹了iOS應用使用Storyboard布局時的IBOutlet與IBAction,文中還附帶講解了為什么IBOutlet屬性是weak的,需要的朋友可以參考下
    2016-04-04
  • IOS簡單實現(xiàn)瀑布流UICollectionView

    IOS簡單實現(xiàn)瀑布流UICollectionView

    這篇文章主要為大家介紹了IOS簡單實現(xiàn)瀑布流UICollectionView的相關資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-01-01
  • 簡潔易用的iOS引導頁制作

    簡潔易用的iOS引導頁制作

    這篇文章主要為大家詳細介紹了iOS引導頁的制作方法,可滿足一般設計的需求,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • 淺談iOS 屏幕方向那點事兒

    淺談iOS 屏幕方向那點事兒

    這篇文章主要介紹了淺談iOS 屏幕方向那點事兒,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • iOS仿網(wǎng)易新聞滾動導航條效果

    iOS仿網(wǎng)易新聞滾動導航條效果

    這篇文章主要為大家詳細介紹了iOS仿網(wǎng)易新聞滾動導航條效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • iOScollectionView廣告無限滾動實例(Swift實現(xiàn))

    iOScollectionView廣告無限滾動實例(Swift實現(xiàn))

    本篇文章主要介紹了iOScollectionView廣告無限滾動實例,可以實現(xiàn)廣告無限滾動,有興趣的可以了解一下。
    2016-11-11
  • IOS觀察者設計模式

    IOS觀察者設計模式

    什么是觀察者模式 什么是觀察者模式?你曾經(jīng)訂閱過報紙嗎?在訂閱報紙的時候,你不用去任何地方,只需要將你的個人地址信息以及訂閱信息告訴出版社,出版社就知道如何將相關報紙傳遞,本文給大家介紹ios觀察者模式,感興趣的朋友一起看看吧
    2015-12-12
  • Objective-C 代碼與Javascript 代碼相互調(diào)用實例

    Objective-C 代碼與Javascript 代碼相互調(diào)用實例

    這篇文章主要介紹了Objective-C 代碼與Javascript 代碼相互調(diào)用實例的相關資料,現(xiàn)在的APP 應用有時候會調(diào)用網(wǎng)頁上的內(nèi)容,為了增加用戶體驗,這里寫下個實例,需要的朋友可以參考下
    2016-10-10

最新評論

弥渡县| 漳浦县| 西华县| 宁武县| 扎囊县| 繁昌县| 杭锦旗| 巧家县| 岢岚县| 东海县| 阆中市| 于田县| 湖北省| 集安市| 永川市| 拜城县| 保靖县| 句容市| 石阡县| 新巴尔虎右旗| 上高县| 台北县| 井冈山市| 交口县| 抚州市| 铜陵市| 周口市| 德庆县| 互助| 芜湖市| 冷水江市| 永兴县| 贵定县| 手游| 延安市| 莎车县| 安化县| 天柱县| 武平县| 申扎县| 延吉市|