block使用詳解

  • 很久之前就想怎么用好block明吩,面試的時候也被問到block會不會用,用的多么殷费。印荔。。感覺block用起來特帥有木有详羡。仍律。。
  • 自我感覺实柠,一個iOS程序員中級低級分水嶺就在于水泉,會不會用block。一段代碼好不好,最直觀的體驗就是1草则,方法封裝了沒钢拧,2,block用的多不多炕横。源内。。(個人意見份殿,不喜勿噴)

今天系統(tǒng)寫了些關(guān)于block的一些變量定義跟方法調(diào)用

首先膜钓,block到底怎么用,什么時候用伯铣,怎么才能想到去用呻此,應(yīng)該是一個新手程序員最頭疼的問題

  • block就像一個小弟一樣,誰要用的時候腔寡,叫過來焚鲜,讓block過一遍就好了,跟函數(shù)的方法一樣放前,block里的具體內(nèi)容忿磅,在調(diào)用之前寫好,在調(diào)用的時候才會執(zhí)行凭语。
  • delegate就是委托葱她,A委托給B去執(zhí)行,告訴B執(zhí)行什么似扔,B還需要簽署一個委托書吨些,相對而言是很麻煩的。

下面炒辉,為具體給出一個block簡單的具體寫法豪墅,讓大家感受一下大體的流程

  • 第一個demo
    要求:
    我們首先創(chuàng)建兩個控制器,第一個控制器的頁面上有一個label和一個按鈕A黔寇,第二個控制器的頁面上有一個textField和一個按鈕B偶器,在textField上隨便輸入一串文字,點擊按鈕B缝裤,跳轉(zhuǎn)會第一個頁面屏轰,講輸入的文字展示在label上。
    思路:
    把這個賦值操作當(dāng)作小弟(block)

我們一邊整理思路憋飞,一邊上代碼

  • 1.首先霎苗,點擊第二個控制器的按鈕B,需要讓label的文字改變搀崭,我們把label改變看作block叨粘,在點擊按鈕的時候調(diào)用
#import <UIKit/UIKit.h>
// 給block起個名兒
typedef void(^blockBack)(NSString *tf);
@interface NextViewController : UIViewController
/** block猾编,注意block用copy修飾,但是不帶“*”號 */
// strong也可以升敲,但是建議copy
@property (nonatomic, copy) blockBack tfblock;
@end

#import "NextViewController.h"
@interface NextViewController ()
@property (weak, nonatomic) IBOutlet UITextField *tf;
@end
@implementation NextViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
}
// 點擊按鈕
- (IBAction)sentTo:(id)sender {
    // 叫小弟(block)過來答倡,讓他做事
    if (_tfblock != nil) {
        NSString *str = _tf.text;
        _tfblock(str);
    }
    [self dismissViewControllerAnimated:YES completion:^{}];
}
@end
  • 2.小弟(block)要做的事是講textField上的文字賦給label,所以驴党,我們應(yīng)該在拿到label的那個控制器做事情瘪撇,也就是說,
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    // 拿到第二個頁面港庄,讓label.text = textField
    // 這個賦值運算就是小弟(block)干的事兒
    NextViewController *vc = segue.destinationViewController;
    vc.tfblock = ^(NSString *str){
        _label.text = str;
    };
}
  • 3.這樣我們整個流程就走通了倔既,想法其實很簡單,控制器B想執(zhí)行賦值操作鹏氧,但是拿不到A的label渤涌,所以叫了一個含有l(wèi)abel賦值代碼的小弟
    (block)過來執(zhí)行。

上面這個demo有個很明顯的弊端把还,就是我們在寫這些block的時候实蓬,全程手打所有的符號,這樣很不方便吊履,所以安皱,我們來寫第二個demo,利用回調(diào)

要求:
控制器上有個按鈕艇炎,點擊按鈕酌伊,讓他顏色改變成固定顏色,
思路:
把這個改變顏色事件當(dāng)成一個做事的小弟(block)

  • 1.寫一個類缀踪,繼承NSObjected寫這個block事件
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
// 定義一個block居砖,取個名兒
typedef void(^ChangeColor)(UIColor *color);
@interface ColorBtn : NSObject
// 直接寫回調(diào)方法,把這個block當(dāng)做參數(shù)傳出驴娃,不用單獨定義block
+ (void)ChangeViewBtnColor:(ChangeColor)changeColorBlock;
@end

#import "ColorBtn.h"
@implementation ColorBtn
+ (void)ChangeViewBtnColor:(ChangeColor)changeColorBlock
{
    NSLog(@"進來了");
    // color參數(shù)傳出
    UIColor *color = [UIColor redColor];
    // 調(diào)用block做事
    changeColorBlock(color);
}
@end
  • 2.在控制器里面的按鈕點擊方法中執(zhí)行這個block
- (IBAction)colorBtn:(id)sender {
    [ColorBtn ChangeViewBtnColor:^(UIColor *color) {
        [_colorBtn setBackgroundColor:color];
    }];
}
  • 3.搞定悯蝉,回調(diào)的寫法就是能省區(qū)很多手打的內(nèi)容,全程提示默認(rèn)托慨,很方便

可能看著有點混亂,但是基本就是這么個思路暇榴,把block想成小弟來看厚棵,就能了解到什么時候考慮去用這個block了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蔼紧,隨后出現(xiàn)的幾起案子婆硬,更是在濱河造成了極大的恐慌,老刑警劉巖奸例,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件彬犯,死亡現(xiàn)場離奇詭異向楼,居然都是意外死亡,警方通過查閱死者的電腦和手機谐区,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門湖蜕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人宋列,你說我怎么就攤上這事昭抒。” “怎么了炼杖?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵灭返,是天一觀的道長。 經(jīng)常有香客問我坤邪,道長熙含,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任艇纺,我火速辦了婚禮怎静,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘喂饥。我一直安慰自己消约,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布员帮。 她就那樣靜靜地躺著或粮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪捞高。 梳的紋絲不亂的頭發(fā)上氯材,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機與錄音硝岗,去河邊找鬼氢哮。 笑死,一個胖子當(dāng)著我的面吹牛型檀,可吹牛的內(nèi)容都是我干的冗尤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼胀溺,長吁一口氣:“原來是場噩夢啊……” “哼裂七!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起仓坞,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤背零,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后无埃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體徙瓶,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡毛雇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了侦镇。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片灵疮。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖虽缕,靈堂內(nèi)的尸體忽然破棺而出始藕,到底是詐尸還是另有隱情,我是刑警寧澤氮趋,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布伍派,位于F島的核電站,受9級特大地震影響剩胁,放射性物質(zhì)發(fā)生泄漏诉植。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一昵观、第九天 我趴在偏房一處隱蔽的房頂上張望晾腔。 院中可真熱鬧,春花似錦啊犬、人聲如沸灼擂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽剔应。三九已至,卻和暖如春语御,著一層夾襖步出監(jiān)牢的瞬間峻贮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工应闯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留纤控,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓碉纺,卻偏偏與公主長得像船万,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子骨田,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354

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

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫唬涧、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,102評論 4 62
  • 一盛撑、block當(dāng)做一個參數(shù)來使用比如說聲明了一個方法:- (void)closeWithTask:(void (^...
    JoshuaC閱讀 415評論 1 2
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補...
    _Yfling閱讀 13,751評論 1 92
  • 作者/胄寧 我愛這一年的純粹捧搞, 孤獨的純粹抵卫, 崩潰的純粹狮荔, 我痛苦的熬過命運的宿醉, 你安享著你的滿心疲憊介粘。 我愛...
    胄寧閱讀 330評論 0 6
  • 作為一個典型的從農(nóng)村走出來的少年殖氏,我身上攜帶著很多為大家所熟知的特性。由于經(jīng)濟原因或者在我看來更多由于教育的影響姻采,...
    星月仰望閱讀 568評論 3 3