问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

ios block 会捕获哪些变量

发布网友 发布时间:2022-04-24 18:39

我来回答

1个回答

热心网友 时间:2023-11-02 18:31

  Block是什么样的?  你可以使用^操作符来声明一个Block变量,它表示一个Block的开始。  int num1 = 7;  int(^aBlock)(int) = ^)int num2) {  return num1+nunm2;  };  在如上代码中我们将Block声明为一个变量,所以可以将它当做一个函数中使用:  NSLog(@"%d", aBlock(49)); //adds 49 to 7 which gives us 56.  我们刚看过了将block当做变量的情况,但通常情况下我们会以内联的方式使用Block,比如在一个变量中。API要么会使用Block在一个对象集合上执行某种操作,要么将其作为一个操作完成后的回调。  NSComperator compareStringsBlock = ^(id stringA, id stringB) {  NSRange rangeS = NSMakeRange (0, [stringA length]);  return (stringA compare:stringB options:comparisonOptions range:rangeS locale:currentLocale];  };    NSArray *compareSortArray = [arrayOfStringDays sortArrayUsingComparator: compareStringsBlock]);  Block具有将临时函数体创建为表达式的优势。Apple文档中指出:  Block是符合如下要求的匿名内联的代码集:  和函数一样具有一个指定类型的参数列表  有一个可以推导或声明的返回值类型  可以从它被定义的词义范围中捕捉状态  可以在需要的时候改变词义范围的状态  可以和相同的词义范围中定义的其他的Block共享更改的可能。  可以在词义范围(堆栈帧)被销毁后继续共享和修改该词义范围(堆栈帧)的状态。  Block是一个自包含的小代码段,封装了用于遍历(线性遍历)或者回调,可以并发执行的任务单元。  声明和使用Block  Apple文档中介绍了如何将一个Block声明为变量,并将其作为一个函数使用:  int (^oneFrom)(int) = ^(int anInt) {  return anInt - 1;  };  // 我们创建了一个内联块^(int anInt)... ,其函数体和结果被传到了另外一个名为OneFrom的Block。    printf("1 from 10 is %d", oneFrom(10));  // 打印出: "1 from 10 is 9"  // 这个block函数(distanceTraveled)传入3个float型参数,返回float值。    float (^distanceTraveled) (float, float, float) =    ^(float startingSpeed, float acceleration, float time) {  float distance = (startingSpeed * time) + (0.5 * acceleration * time * time);  return distance;  };  你也可以传入一个Block作为一个参数,而不要以如上的方式声明它们,这样就可以在需要将block作为参数的时候以内联代码的方式简单地实现。  NSArray *anArray = [NSArray arrayWithObjects: @"cat", @"dog",nil];  sortFunction(anArray, ^(string *a string *b){  if ( a == @"cat") return TRUE; });  这样我们就看到一个内联的block代码段占据了最后一个参数(必须是参数列表的最后一个参数)的位置。Cocoa提供了很多使用Block的方法,这样你就可以传入Block作为方法的参数:  NSArray *array = [NSArray arrayWithObjects: @"A", @"B", @"C", nil];  NSSet *filterSet = [NSSet setWithObjects: @"A", @"Z", @"Q", nil];    BOOL (^test)(id obj, NSUInteger idx, BOOL *stop); //Block declaration returns BOOL, params inc. id and BOOL  //body of block gets the block literal ^(id obj, NSUInteger idx, Bool *stop)... and the body logic  test = ^ (id obj, NSUInteger idx, BOOL *stop) {  if (idx < 5) {  if ([filterSet containsObject: obj]) {  return YES;  }  }  return NO;    };  Apple提供的另外一个例子是:  __block BOOL found = NO;  NSSet *aSet = [NSSet setWithObjects: @"Alpha", @"Beta", @"Gamma", @"X", nil];  NSString *string = @"gamma";  //we provide below a way of how to enumerate, using our own compare logic  [aSet enumerateObjectsUsingBlock:^(id obj, BOOL *stop) {  if ([obj localizedCaseInsensitiveCompare:string] == NSOrderedSame) {  *stop = YES;  found = YES;  }  }];  As you can see, it takes a little while to have it sink in but once you get it, it's quite simple. I suggest looking at Apple's documentation, as well as looking at the referenced APIs to see how they are used. Practice makes perfect.
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
冠状病毒酒精消毒怎么使用 袁咏仪主演的真爱之百万新娘哪个网站可以看 ...方便的话告诉我结局怎么样。陈玉是不是死了 冉冉东升可以组什么句子 求我姓冉的专属句子 弹弹堂高手之路全部过完给多少强化石 百度弹弹堂2里面的《高手之路高级高抛打法(高级)》《高手之路高级高差训 ... 弹弹堂工厂3怎么打 弹弹堂高手之路的任务怎么触发的 腹肌练习计划 如何在ios中使用block 体操的Blocking teare blurred our eyes,distance中文怎么说 英语block有街区的意思吗? 海尔双桶洗衣机内桶不锈钢好还是塑料好 塑料的好还是不锈钢的好?塑料面盆和不锈钢面盆哪个好?为什么? 波轮洗衣机的内桶是塑料的好还是不锈钢的好 小鸭双桶洗衣机甩桶不锈钢好还是塑料好 洗衣机里的塑料桶和不锈钢桶有什么区别 洗衣机的脱水桶塑料的好,还是不锈钢的好? 请问,全自动的洗衣机的内桶是要用不锈钢的好还是塑料的好? 波轮洗衣机的内桶,塑料的和不锈钢的有什么不同吗? 洗衣机是不锈钢的内桶好还是塑料内桶好? 怎么选购洗衣机?内筒分塑料和不锈钢材质?怎么选择 双缸洗衣机不锈钢桶与塑料桶那个好 滚筒洗衣机的内桶,塑料的和不锈钢的有什么不同吗? 泼轮洗衣机,泼轮是钢板的好还是塑料的好? 请问,全自动洗衣机的机身是塑料的好还是不锈钢【或铁】的哪个好一些 洗衣机内筒什么材质的好?塑料还是不锈钢?有什么推荐? 洗衣机里的塑料桶和不锈钢桶有什么区别??? 我的世界服务器怎么搞命名方块能使玩家隔一段时间头上冒爱心? 巨人通力的安全回路图怎么看 英语作文,200词。描述一个城市的交通状况 预防甲型h1n1流感 八年级英语作文 翻译一段CSS原理描述文字,全文在http://www.w3.org/TR/CSS2/visudet... 09年中考英语作文预测---猪流感 block的嵌套调用方式,2个block怎么相互嵌套 scaled from single block of marble 跪求JS动态改变层的style.left属性使其水平移动的例子 邮政货运单号1181620378000怎么查询 体育上各种赛场的英语表达 电脑蓝屏 0x0000000怎么办? 梅花有哪些自身的特点 梅花的特点有哪些? 关于梅花的特点 梅花的特点是什么? 梅花有什么特征? 梅花的外形特征 梅花的特点和象征意义 梅花有什么特点,可以象征