block的基本使用

一 Block基本常识

1.声明block
声明没有参数没有返回值block
void(^block1)(); block1就是该block数据类型的变量名
有返回值有参数
int(^block2)(int);

2.定义block
2.1 没有参数,没有返回值block的定义

      void(^block1)() = ^{  };

2.2 有参数,有返回值block的定义

  int(^block2)(int) = ^int(int a){ return a  };     ==    int(^block2)(int) = ^(int a){ return a  };   
 = 后面的返回值类型可以省略     
 注意:如果block有返回值,那么代码块中一定要有return

3.block作用
封装(保存)代码块

4.block调用
用变量名+()就可以调用
如果有参数,()内一定要写上 参数的变量名

5.block类型
block的数据类型去掉变量名 就是 block的类型

 例如:void(^block1)()的block类型为   void(^)()
          int(^block2)(int)的Block类型为 : int(^)(int)

6.生成block类型的快捷方式
输入inline + 回车 就会弹出block类型的定义模板

  <#returnType#>(^<#blockName#>)(<#parameterTypes#>) = ^(<#parameters#>) {        <#statements#>
};
 注意:苹果文档里面说明block是一个对象
 ![](http://upload-images.jianshu.io/upload_images/2557720-b88ff91594815aa0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 

二 block的使用场景

1.block可以作为方法的参数去使用
1.1 为什么把block作为参数使用?
封装一个类,有些事情方法内部不能决定,需要外界决定,那么可以提供block给外界 , 通过block外界就可以把想做的事情传进来
经典案例:动画 和 AFN发送网络请求

  动画:  UIView animateWithDuration:<#(NSTimeInterval)#> animations:<#^(void)animations#>
     [UIView animateWithDuration:2.0 animations:^{
         //在这里写(外界)想做的事情
     }];
AFN: 
mgr GET:<#(nonnull NSString *)#> parameters:<#(nullable id)#> progress:<#^(NSProgress * _Nonnull      downloadProgress)downloadProgress#> success:<#^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject)success#> failure:<#^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error)failure#>

[mgr GET:XMGBaseUrl parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {        
//这里写(外界)想做的事情        
//参数的作用:内部得到的数据,想要传给外界,就可以通过block的参数来传递                            
//内部对参数赋值,在外界通过这个参数  就能够拿到这个值    
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {        
//这里写(外界)想做的事情
}];

2.block作为成员变量使用

为什么把block作为成员变量:一个类中,有些事情需要外界来决定,就可以提供一个block成员变量,外界通过对blcok赋值,就能把想做的事情传进来

不带参数的block成员变量

声明   @property (nonatomic, copy)void(^task)();

给block赋值 (set方法)

  XTSettingArrowItem *item1 = [XTSettingArrowItem rowItemWithImage:nil title:@"使用兑换码" subTitle:nil];
  item1.task = ^{       
 UIAlertView *alertV = [[UIAlertView alloc] initWithTitle:@"清理缓存" message:@"帮你清理12M" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];        
[alertV show];
  };

带参数的block成员变量

声明   @property(nonatomic,copy) void(^task)(NSIndexPath *indexPath) ;

给block赋值 (set方法)

  XTSettingArrowItem *item1 = [XTSettingArrowItem rowItemWithImage:nil title:@"使用兑换码" subTitle:@"23:00"];
item1.task= ^(NSIndexPath *indexPath){
    UITextField *textF = [[UITextField alloc] init];        
[textF becomeFirstResponder];        
//添加到当前点击的Cell上.        
//获取当前点击的是哪个Cell.        
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
    [cell addSubview:textF];
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容

  • 目录 Block概述 Block定义方式 Block保存代码 Block传值 Block对外部变量的传递 Bloc...
    子斌阅读 1,384评论 2 7
  • 1.Block代码块的基本使用 Block的作用Block主要用来保存一段代码Block可以封装一段代码,这段代码...
    断剑阅读 818评论 1 3
  • 例行科普 Block 是 iOS4 之后添加的一种语法结构,也成为闭包,或者匿名函数,在iOS开发过程中应用较多,...
    CJ_BLUE阅读 822评论 0 1
  • 通过这几天大家的反馈,感觉大家对Block和内存泄漏的呼声很高,本来想这次写runtime在实际项目中的用法,不过...
    键盘风筝阅读 1,804评论 0 16
  • Block 释义:匿名的函数、代码块(把你想要执行的代码封装在这个代码块里,等到需要的时候再去调用),是苹果在 i...
    ibiaoma阅读 455评论 0 1