weak-strong dance(Xcode 7.3變化)

創(chuàng)建工程:,先來(lái)一段簡(jiǎn)單的代碼:

#import "ViewController.h"

@interface ViewController ()
// 1.聲明block
@property (nonatomic,copy) void(^MyBlock)();
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 2.定義block
    self.MyBlock = ^{
        
        NSLog(@"%@",self.view);
    };
    // 3.執(zhí)行block
    self.MyBlock();
    
}

@end

這時(shí)Xcode會(huì)直接給予提示:

循環(huán)引用提示.png

提示我們產(chǎn)生了循環(huán)引用:

self.Myblock --> 當(dāng)前控制器對(duì)block產(chǎn)生強(qiáng)引用
self.view -->block對(duì)self(當(dāng)前控制器)產(chǎn)生強(qiáng)引用

解決辦法就是使用__weak修飾

#import "ViewController.h"

@interface ViewController ()
// 1.聲明block
@property (nonatomic,copy) void(^MyBlock)();
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    __weak typeof(self) weakSelf = self;
    // 2.定義block
    self.MyBlock = ^{
        
        NSLog(@"%@",weakSelf.view);
    };
    // 3.執(zhí)行block
    self.MyBlock();
    
}

@end

參考鏈接:http://www.reibang.com/p/011bd4b8df7b

接下來(lái)對(duì)UI視圖進(jìn)行一些調(diào)整,進(jìn)一步演示Block使用時(shí)的一些細(xì)節(jié)

1.嵌入導(dǎo)航控制器
2.點(diǎn)擊導(dǎo)航控制器的根控制器的RightBarButtonItem,跳轉(zhuǎn)到之前的ViewController控制器


UI.png

3.在ViewController中重寫Dealloc方法
4.在定義Block的內(nèi)部,打印兩次self.view,并在兩次打印中間添加一個(gè)2s的延遲

改動(dòng)代碼后:

#import "ViewController.h"

@interface ViewController ()
// 1.聲明block
@property (nonatomic,copy) void(^MyBlock)();
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 解決Block內(nèi)部循環(huán)引用
    __weak typeof(self) weakSelf = self;
 
    // 2.定義block
    self.MyBlock = ^{
        
        /*
                從Xcode 7.3開始,包括操作系統(tǒng)一旦升級(jí)后,就不需要強(qiáng)弱引用!
         
            而在之前的版本中的寫法為:
         
             __strong typeof(weakSelf) strongSelf = weakSelf;
         
            if(strongSelf){
         
                 NSLog(@"%@",strongSelf);
                 
                 [NSThread sleepForTimeInterval:2];
                 
                 NSLog(@"%@",strongSelf);
            }
         
            因?yàn)槭褂胈_weak修飾的對(duì)象,隨時(shí)可能會(huì)被銷毀,在之前版本中,如果不使用強(qiáng)引用,第二段打印代碼結(jié)果就可能為nil
            這也就是weak-strong dance的使用場(chǎng)景
         
         */
        
        
        
        NSLog(@"%@",weakSelf.view);
        
        [NSThread sleepForTimeInterval:2];
        
        NSLog(@"%@",weakSelf.view);
        
    };
    
    // 3.異步執(zhí)行block
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        
        self.MyBlock();
    });
    
}

- (void)dealloc{
    
    NSLog(@"%s",__func__);
}

@end

因?yàn)槭褂玫氖荴code 7.3,所有成功打印出結(jié)果:

2016-08-12 12:04:30.573 Block擴(kuò)展[3415:436303] <UIView: 0x7ff02363b030; frame = (0 0; 414 736); autoresize = W+H; layer = <CALayer: 0x7ff023634320>>
2016-08-12 12:04:32.577 Block擴(kuò)展[3415:436303] <UIView: 0x7ff02363b030; frame = (0 0; 414 736); autoresize = W+H; layer = <CALayer: 0x7ff023634320>>
2016-08-12 12:04:32.577 Block擴(kuò)展[3415:436260] -[ViewController dealloc]

weak-strong dance也是開發(fā)中需要注意的一個(gè)block使用的技巧,而更嚴(yán)謹(jǐn)一點(diǎn)的寫法應(yīng)該是:

   __strong typeof(weakSelf) strongSelf = weakSelf;
         
   if(strongSelf){
         
       NSLog(@"%@",strongSelf);
                 
       [NSThread sleepForTimeInterval:2];
                 
       NSLog(@"%@",strongSelf);
   }

但隨著Xcode 7.3更新,已經(jīng)為我們避免了這個(gè)問(wèn)題,直接使用__weak就可以了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市墓拜,隨后出現(xiàn)的幾起案子骑晶,更是在濱河造成了極大的恐慌浇坐,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件匣屡,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)盒使,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)七嫌,“玉大人少办,你說(shuō)我怎么就攤上這事∷性” “怎么了英妓?”我有些...
    開封第一講書人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)绍赛。 經(jīng)常有香客問(wèn)我蔓纠,道長(zhǎng),這世上最難降的妖魔是什么吗蚌? 我笑而不...
    開封第一講書人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任腿倚,我火速辦了婚禮,結(jié)果婚禮上蚯妇,老公的妹妹穿的比我還像新娘敷燎。我一直安慰自己,他們只是感情好箩言,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開白布懈叹。 她就那樣靜靜地躺著,像睡著了一般分扎。 火紅的嫁衣襯著肌膚如雪澄成。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,462評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音墨状,去河邊找鬼卫漫。 笑死,一個(gè)胖子當(dāng)著我的面吹牛肾砂,可吹牛的內(nèi)容都是我干的列赎。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼镐确,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼包吝!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起源葫,我...
    開封第一講書人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤诗越,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后息堂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嚷狞,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年荣堰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了床未。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡振坚,死狀恐怖薇搁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情渡八,我是刑警寧澤只酥,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站呀狼,受9級(jí)特大地震影響裂允,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜哥艇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一绝编、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧貌踏,春花似錦十饥、人聲如沸派继。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)伞租。三九已至,卻和暖如春匣距,著一層夾襖步出監(jiān)牢的瞬間衅疙,已是汗流浹背贝咙。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留作媚,地道東北人攘滩。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像纸泡,于是被迫代替她去往敵國(guó)和親漂问。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1.1 局部變量 局部自動(dòng)變量女揭,在Block中可被讀取蚤假。Block定義時(shí)copy變量的值,在Block中作為常量使...
    陳雨塵閱讀 2,934評(píng)論 4 31
  • 禪與 Objective-C 編程藝術(shù) (Zen and the Art of the Objective-C C...
    GrayLand閱讀 1,626評(píng)論 1 10
  • *面試心聲:其實(shí)這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來(lái)就是把...
    Dove_iOS閱讀 27,140評(píng)論 30 470
  • iOS網(wǎng)絡(luò)架構(gòu)討論梳理整理中吧兔。磷仰。。 其實(shí)如果沒有APIManager這一層是沒法使用delegate的掩驱,畢竟多個(gè)單...
    yhtang閱讀 5,192評(píng)論 1 23
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件冬竟、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,103評(píng)論 4 62