关于block的记录

认识block


block和函数很相似所以可以对比函数看一下 (不拿函数指针对比了看着晕)
带参数带返回值的例子 函数声明:
int sum (int a,int b) int (^sum) (int a,int b)
很明显基本一样的 就是多了一个block的标志^然后把函数名括起来了

函数和block的对比
都是保存一段代码 用来执行
int main(){ //在函数中执行的时候就是一模一样的调用 sum(1,2);//函数 sum(1,2);//block }
不同的地方是保存代码块的书写方式是不同的
int sum (int a,int b){int s = a+b; return s;}
int (^sum)(int a,int b)=^(int a,int b){int s = a+b; return s;}
最重要的是 block是可以在函数内部保存代码块 函数只能在外面

block的书写


blcok的typedef比较特殊直接这么写一句就可以了:
typedef int (^Sum)(int, int); Sum sum;
然后就可以去定义这种类型的block了
sum =^(int a,int b){int s = a+b; return s;}
写的时候好看一点了 用的时候是一样的
sum(1,2);
block回调 block事先保存一段代码恰当的时候拿出来调用

__block int a = 10;
    // 定义Block变量
void(^MyBlock)()=^{
        NSLog(@"执行任务");
    a=20;
};
// 调用Block内部代码
    MyBlock();
//在执行一次
    MyBlock();

1.在定义block的时候 如果引用了外部变量 会对外部变量做一个copy 
记录住定义block的时变量的数值
如果后续再修改x的值 不会影响block内部的数值变化

2.如果要在block中 修改外部变量的数值 需要使用__block修饰符号 
定义block时 如果外部使用__block的变量 
block定义之后 外部变量的指针地址同样会变成堆区的地址

//inlineBlock
 returnType(^blockName)(parameterTypes) = ^(parameters) {
        statements
    };

2.关于解决循环引用的问题


block被强引用而且block里面有强引用属性的时候会存在循环引用的问题
我们把block里面的强引用改成弱指针就可以了
_unsafe_unretained viewController*shre = self
__weak viewController*shre = self
__weak typeof(self) share = self

typedef void (^BoolBlock)(BOOL);
一个只接受一个BOOL参数,没有返回值的block
typedef int (^IntBlock)(void);
一个没有参数,返回int的block
typedef BoolBlock (^HugeBlock)(IntBlock);
看看,这个HugeBlock的参数和返回值都是block

3.下面是一个block应用例子


写一个带block的方法 并调用此方法
<code>
typedef void (^IsScuess) ();
@property (nonatomic, copy) IsScuess isScuess;

//写方法
-(void)addDeviceModel:(DeviceModel*)Model IsScuess:(IsScuess)isScuess{
[self.backView makeToastActivity];
isScuess();
}
//调用
[self addDeviceModel:model IsScuess:^{
if ([[DeviceDataManage sharedManager] addDeviceWithModel:model]) {
[share.backView hideToastActivity];
[share.backView makeToast:@"添加成功"];
}else{
[share.backView hideToastActivity];
[share.backView makeToast:@"设备重复"];
}}];</code>

然后对比下系统的带block的方法
+(void)transitionWithView:(UIView *)view duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion

尾记:感谢麻友三万等童鞋提供的支持😄


W0CYUJT51S%{SVA@F41KAG9.jpg
9MFG`JOD3W$_`4SP(UIIED2.jpg

![@Z{07P]6E3VXC`P]N0N)NY5.jpg](http://upload-images.jianshu.io/upload_images/301562-dc438862fd804179.jpg?imageMogr2/auto-orient/strip|imageView2/2/w/1240)

![7NW1{44ZXYDF`NB@G7{@]3U.jpg](http://upload-images.jianshu.io/upload_images/301562-881a98fa4bfb23d9.jpg?imageMogr2/auto-orient/strip|imageView2/2/w/1240)
就是你 菊花 的地方价格 handler
然后结束的时候调用下handler就行了

黑幕背后的__block修饰符
内存管理——如何验证block在栈上,还是堆上

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,635评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,628评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,971评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,986评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,006评论 6 394
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,784评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,475评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,364评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,860评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,008评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,152评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,829评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,490评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,035评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,428评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,127评论 2 356

推荐阅读更多精彩内容

  • 转自李峰峰博客 一、概述 闭包 = 一个函数「或指向函数的指针」+ 该函数执行的外部的上下文变量「也就是自由变量」...
    Joshua520阅读 990评论 0 0
  • 简述 一句话搞懂block:可以理解为,block是对上下文代码段的打包,然后在适当的时机执行。 block长什么...
    Allan_野草阅读 2,167评论 0 25
  • Block基础和retain cycle(循环引用) blcok简介 Block 是c语言的扩展,并不是什么高新技...
    董军1990阅读 12,307评论 22 69
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,152评论 30 470
  • 本文分两部分介绍Block: 第一部分:Block基础知识介绍第二部分:Block经常使用的三种情况(方法回调,C...
    小小土豆dev阅读 808评论 2 9