iOS块-block和closures

这遍文章是我对块的理解!

1块:

       块是cocoa应用开发强大的c语言特性。和swift的闭包closure,其他语言的lambdas类似。(匿名函数呗。。特么可以当作变量理解。)快是很容易使用的语法之一。块也是一个对象,类似数组和字典,可被继承。既然是对象,那么必定也有它对应的方法和值属性。即可保存值,也可返回值(特么类似于属性的read和write么?)。用于面试时候的定义:Blocks are objects that encapsulate a unit of work -or,in less abstract terms, a segment code - that can be executed at any time.(块是封装一组代码的对象,可以在任何时间被执行)。

     块牛逼的特性就是可以作为方法参数或者函数本身传递,当然也可以作为一个东东(块本来就是对象嘛!)返回来;其他语言中函数也是个变量,这么说你是不是瞬间就懂了!!!

func add(a:Int,_b:Int) ->Int{

return  a + b }

var function: (Int,Int) ->Int = add

------------------------------------------------------

块用在属性里面

@property(nonatomic, copy) void(^myBlock)();//无参无返回值

@property(nonatomic, copy) void(^myBlock1)(NSString*);//nsstring 类型参数

@property(nonatomic, copy) NSString*(^myBlock2)(NSString*);//中间是名字

@property(nonatomic, copy) myBlock testBlock;//和人家申明bool类型的东西没区别,对吧。

//第三个好理解,定义函数的不是这样么:- (void)test{},- (NSString *)testa{},对吧。

块赋值

myBlock testBlock = ^void(){};//对比 Bool stop = YES;   NSArray *arr = @[]; NSString *str = @"";

块使用:

一般在项目中是 A要把值传给B,则A申明块,并填值:

@property(nonatomic,strong) void(^blockName)(someObject *); //现在也可以加上nonull

在事件中触发

//使用前先判断哈,要不然null满天飞。

if(self.blockName) {

self.blockName(someObject); 

 }//在实际中不仅仅只有这些。

比如:afnetworking中的桥段

if(success) {

dispatch_group_async(self.completionGroup?:http_request_operation_completion_group(),self.completionQueue?:dispatch_get_main_queue(), ^{

success(self, responseObject);

});

//----------------------------------------------

B取值。。。。。。。。。。。

A.blockName = ^(someObject *obj){

//这里的obj是传过来的东西。

}

。在项目中海油这样的

[manager  GET: str  parameters:dic success:^(AFHTTPRequestOperation*operation,ONOXMLDocument*responseDocument) {

NSData*data = [responseDocument.rootElement.stringValuedataUsingEncoding:NSUTF8StringEncoding];

NSError*error =nil;

idjsonObject = [NSJSONSerializationJSONObjectWithData:dataoptions:NSJSONReadingMutableContainerserror:&error];

if([jsonObjectisKindOfClass:[NSDictionaryclass]]){

NSMutableArray*sca = (NSMutableArray*)jsonObject[@"Table"];

self.bigArray= [scacopy];

[self.tableViewreloadData];

}else{

NSLog(@"An error happened while deserializing the JSON data.");

};

}failure:nil];

这段代码是在B中的,B中的manager之行他的某个函数,产生了你需要的东西,然后通过块传回来(回调)给你。一切请求事务放在A中去做。

块改变块外值的问题:

由于块中直接取外面的值都是copy方式,要想改变块外的值需要把块外变量加__block.

块类型的问题:

块中引用值的类型决定块的类型。比如引用了static类型的数据就是全局类型的块。

2:闭包closure ,最简单的一种是这样的:

myClosure = {$0 - $1}

函数是这样的

func addsss(a:Int)->Int {}

闭包这样  (a:Int)->Int

然后这样用 (a:Int)->Int = {(a:Int)in

//a.....

} 

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

推荐阅读更多精彩内容

  • iOS代码块Block 概述 代码块Block是苹果在iOS4开始引入的对C语言的扩展,用来实现匿名函数的特性,B...
    smile刺客阅读 2,328评论 2 26
  • Block使用场景,可以在两个界面的传值,也可以对代码封装作为参数的传递等。用过GCD就知道Block的精妙之处。...
    Coder_JMicheal阅读 716评论 2 1
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,678评论 0 9
  • 博客会迁移到csdn
    Gugigugi阅读 186评论 0 0
  • 今夜的你是这样的美 脸是桃色的 唇是桃色的 心却是天青色 我曾问你: 是什么让我们今生相遇? 我想如果有前生; ...
    热爱申命阅读 978评论 2 0