block-注意事項

  1. block的變量傳遞
    如下例子分別聲明一個局部變量、一個__block修飾的局部變量秩命、一個靜態(tài)變量和一個全局變量尉共,并且初始的值為1褒傅,在block中打印外部的值,而且在該block過去之后改變前面聲明的變量值袄友。如下:
@implementation ViewController

int param = 4;
- (void)viewDidLoad {
   [super viewDidLoad];
   
   int param1 = 1;
   static int param2 = 1;
   __block int param3 = 1;

   _block = ^{
       NSLog(@"%s----%d-%d-%d-%d",__func__,param, param1,param2,param3);
   };
   param = 2;
   param1 = 2;
   param2 = 2;
   param3 = 2;

   _block();
}

-[ViewController viewDidLoad]_block_invoke----2-1-2-2
打印日志如下殿托,除了局部變量是1外其他都是2,在block中除了局部變量是傳遞外剧蚣,其他的都是指針傳遞支竹。

  1. MRC中沒有強指針和弱指針的概念,所有屬性都是基本數(shù)據(jù)類型券敌,基本數(shù)據(jù)類型都放在棧里面
    在block內(nèi)部使用外部指針且會造成循環(huán)引用情況下,需要用weak修飾外部指針 weak typeof(self) weakSelf = self;
    如例子block造成循環(huán)引用:Block會對其塊里面的所有外部強指針變量變量全部引用一次唾戚。
#import "modelViewController.h"
@interface modelViewController ()
@property (nonatomic,strong) void(^block)();
@end
@implementation modelViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    int param = 1;
    _block = ^{
        NSLog(@"%@", self);
    };
    param = 2;
}
警告會出現(xiàn)retain cycle即循環(huán)引用

問問

  1. 在block內(nèi)部如果調(diào)用了延時函數(shù)還使用弱指針會取不到該指針,因為已經(jīng)被銷毀了,需要在block內(nèi)部再將弱指針重新強引用一下__strong typeof(self) strongSelf = weakSelf;如一下代碼:
 __weak typeof(self) weakSelf = self;
 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 *
 NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
     NSLog(@"%@", weakSelf);
 });
  1. 如果需要在block內(nèi)部改變外部變量的話,需要在用__block修飾外部變量
int param = 1;
 void goToWork(WorkBlock workBlock)
{
     NSLog(@"%d", param);
}
//上面的結(jié)果是1

通過上面的block可以看出在block中訪問外面的的變量是沒有問題的,但是直接修改外面的變量的值是會報錯的待诅,如下param = 2叹坦;會報錯。

void goToWork(WorkBlock workBlock){
    param = 2卑雁;
     NSLog(@"%d", param);
}

所以在修改block外部變量的值之前需要在前面加__block;

待補充...

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末募书,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子测蹲,更是在濱河造成了極大的恐慌莹捡,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扣甲,死亡現(xiàn)場離奇詭異篮赢,居然都是意外死亡,警方通過查閱死者的電腦和手機琉挖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門启泣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人示辈,你說我怎么就攤上這事寥茫。” “怎么了矾麻?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵纱耻,是天一觀的道長。 經(jīng)常有香客問我险耀,道長弄喘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任甩牺,我火速辦了婚禮蘑志,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己卖漫,他們只是感情好,可當我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布赠群。 她就那樣靜靜地躺著羊始,像睡著了一般。 火紅的嫁衣襯著肌膚如雪查描。 梳的紋絲不亂的頭發(fā)上突委,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天,我揣著相機與錄音冬三,去河邊找鬼匀油。 笑死,一個胖子當著我的面吹牛勾笆,可吹牛的內(nèi)容都是我干的敌蚜。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼窝爪,長吁一口氣:“原來是場噩夢啊……” “哼弛车!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蒲每,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤纷跛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后邀杏,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贫奠,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年望蜡,在試婚紗的時候發(fā)現(xiàn)自己被綠了唤崭。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡泣特,死狀恐怖浩姥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情状您,我是刑警寧澤勒叠,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站膏孟,受9級特大地震影響眯分,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜柒桑,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一弊决、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦飘诗、人聲如沸与倡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽纺座。三九已至,卻和暖如春溉潭,著一層夾襖步出監(jiān)牢的瞬間净响,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工喳瓣, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留馋贤,地道東北人。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓畏陕,卻偏偏與公主長得像配乓,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子惠毁,可洞房花燭夜當晚...
    茶點故事閱讀 43,452評論 2 348

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

  • 1.1 局部變量 局部自動變量扰付,在Block中可被讀取。Block定義時copy變量的值仁讨,在Block中作為常量使...
    陳雨塵閱讀 2,920評論 4 31
  • 《Objective-C高級編程》這本書就講了三個東西:自動引用計數(shù)羽莺、block、GCD洞豁,偏向于從原理上對這些內(nèi)容...
    WeiHing閱讀 9,804評論 10 69
  • 在介紹Block之前通過一個簡單的應(yīng)用場景認識下Block 場景描述如下:TableView上面有多個Custom...
    黑_白_灰閱讀 1,385評論 4 29
  • 在了解Block之前盐固,我們有必要先了解一下一些基礎(chǔ)知識。我們都知道丈挟,Objective-C是由C語言擴展而來的刁卜。在...
    SmithJackyson閱讀 693評論 0 8
  • 本文主要根據(jù)《Objective-C高級編程》這本書中的第二章來進行的一個總結(jié),其中包含了查看其它文章后的總結(jié)和自...
    AnICoo1閱讀 1,024評論 0 2