block的使用

block實際上就是Objective-C語言對閉包的實現(xiàn)羽嫡。

  1. NSString * ( ^ myBlock )( int );
    上面的代碼聲明了一個block(^)原型驹暑,名字叫做myBlock惠昔,包含一個int型的參數(shù)骂际,返回值為NSString類型的指針诵叁。

下面來看看block的定義:
myBlock = ^( int paramA )
{
return [ NSString stringWithFormat: @"Passed number: %i", paramA ];
};
上面的代碼中界牡,將一個函數(shù)體賦值給了myBlock變量簿寂,其接收一個名為paramA的參數(shù),返回一個NSString對象宿亡。

注意:一定不要忘記block后面的分號常遂。

定義好block后,就可以像使用標準函數(shù)一樣使用它了:
myBlock(7);

2 block 的使用 : 如果block是一個屬性挽荠,在調(diào)用block的時候克胳,如果block函數(shù)體中 調(diào)用了 [self did]就出出現(xiàn)循環(huán)引用,因為A中有B B中有A 互相調(diào)用圈匆,就會出現(xiàn)問題漠另,如果block不是屬性,則不會出現(xiàn)循環(huán)引用跃赚,例如:
[UIView animateWithDuration: 0.5 animations: ^{
self.userName.center = accountCenter;
self.password.center = passwordCenter;
self.login.alpha = 1;
} completion: nil];這個為啥會可以使用self,因為這個view不是這個控制器的屬性笆搓,所以不會又循環(huán)引用的問題
如果需要解決循環(huán)引用的問題可以
//先聲明一個weak弱對象
__weak ViewController *wSelf = self;
[UIView animateWithDuration: 0.5 animations: ^{
//在block的執(zhí)行過程中,使用強對象對弱對象進行引用
wSelf.userName.center = accountCenter;
wSelf.password.center = passwordCenter;
wSelf.login.alpha = 1;
}

3//聲明一個局部整型變量
int intValue = 3;
//聲明一個返回值為int,一個int參數(shù)的block變量
int (^block)(int) = ^(int m){
intValue++;
return m * intValue;
};
//調(diào)用block變量,5作為參數(shù)之后的結(jié)果
NSLog(@"block(5) = %d",block(5));
在上面的例子中,我們編譯程序后發(fā)現(xiàn)編譯器會有紅色錯誤,錯誤提示為
Variable is not assignable (missing __block type specifier)
為什么會出現(xiàn)不能被賦值的錯誤提示呢?

block在實現(xiàn)時就會對它引用到的它所在方法中定義的棧變量進行一次只讀拷貝纬傲,所以intValue只是可讀的满败,不能操作
在 block 塊內(nèi)使用該只讀拷貝。
那為了避免上述錯誤叹括,就要使用__block修飾符來修飾外部變量,用來通知編譯器該外部變量intValue與block中的intValue指的是同一塊兒內(nèi)存地址算墨,而不需要內(nèi)存拷貝。
所以 __block int intValue = 3;這樣才行如果 是 intValue;也會正常運行领猾,

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末米同,一起剝皮案震驚了整個濱河市骇扇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌面粮,老刑警劉巖少孝,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異熬苍,居然都是意外死亡稍走,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門柴底,熙熙樓的掌柜王于貴愁眉苦臉地迎上來婿脸,“玉大人,你說我怎么就攤上這事柄驻『鳎” “怎么了?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵鸿脓,是天一觀的道長抑钟。 經(jīng)常有香客問我,道長野哭,這世上最難降的妖魔是什么在塔? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮拨黔,結(jié)果婚禮上蛔溃,老公的妹妹穿的比我還像新娘。我一直安慰自己篱蝇,他們只是感情好贺待,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著态兴,像睡著了一般狠持。 火紅的嫁衣襯著肌膚如雪疟位。 梳的紋絲不亂的頭發(fā)上瞻润,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天,我揣著相機與錄音甜刻,去河邊找鬼绍撞。 笑死,一個胖子當著我的面吹牛得院,可吹牛的內(nèi)容都是我干的傻铣。 我是一名探鬼主播,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼祥绞,長吁一口氣:“原來是場噩夢啊……” “哼非洲!你這毒婦竟也來了鸭限?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤两踏,失蹤者是張志新(化名)和其女友劉穎败京,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體梦染,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡赡麦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了帕识。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片泛粹。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖肮疗,靈堂內(nèi)的尸體忽然破棺而出晶姊,到底是詐尸還是另有隱情,我是刑警寧澤伪货,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布帽借,位于F島的核電站,受9級特大地震影響超歌,放射性物質(zhì)發(fā)生泄漏砍艾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一巍举、第九天 我趴在偏房一處隱蔽的房頂上張望脆荷。 院中可真熱鬧,春花似錦懊悯、人聲如沸蜓谋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽桃焕。三九已至,卻和暖如春捧毛,著一層夾襖步出監(jiān)牢的瞬間观堂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工呀忧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留师痕,地道東北人。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓而账,卻偏偏與公主長得像胰坟,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子泞辐,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355

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

  • Block是iOS在4.0之后新增的語法笔横,在iOS SDK 4.0之后竞滓,block幾乎出現(xiàn)在所有新版的API之中,...
    阿窩額咦嗚芋閱讀 412評論 0 0
  • **Block **是iOS在4.0之后新增的語法吹缔,在iOS SDK 4.0之后虽界,block幾乎出現(xiàn)在所有新版的A...
    ios_geek閱讀 784評論 0 0
  • iOS學(xué)習(xí)-(1)block的使用和注意 本文簡介 本文主要介紹1.block的基本使用 ...
    一片楓葉隨風(fēng)舞閱讀 373評論 0 0
  • 為什么題目是“Block的使用你看我啊”,而不是牛逼哄哄的“Block你看我就夠了”涛菠,原因是本文并不會講解Bloc...
    無所不知的程序員閱讀 655評論 0 0
  • 一莉御、什么是XSS攻擊 XSS又叫CSS (Cross Site Script) ,跨站腳本攻擊俗冻。它指是惡意攻擊者往...
    yyshang閱讀 2,599評論 0 0