ios开发之 开始使用blocks
来源:互联网 发布:战神笔记本优化 编辑:程序博客网 时间:2024/05/17 22:54
初探Blocks:Getting Started with Blocks
翻译不不到位之处,请指正,建议点击上面链接看苹果官网介绍。
下面的部分将以具体的实例帮助你开始使用Blocks
1. 申明和使用Blocks
使用 ^ 操作符声明一个block变量并且指示block的开始,block的函数体包含在一对 {} 中,如下面的例子所示,同C语言一样,最后的 ; 指示声明的结束。
int multiplier = 7;int (^myBlock)(int) = ^(int num) { return num * multiplier;};
下图解释了上面的例子:
注意:block可以利用在定义它所处的作用域内的变量。
如果你声明了一个block,你可以像一个函数一样使用它。
int multiplier = 7;int (^myBlock)(int) = ^(int num) { return num * multiplier;}; printf("%d", myBlock(3));// prints "21"
2. 直接使用Block
在许多场合,你不需要声明一个block变量,而是只需要写一个内联的block作为参数传递。下面的例子是一个 qsort_b 的函数,它同标准的 qsort_r 函数相同,但是它使用的是 block 变量作为它的最后一个参数。
char *myCharacters[3] = { "TomJohn", "George", "Charles Condomine" }; qsort_b(myCharacters, 3, sizeof(char *), ^(const void *l, const void *r) { char *left = *(char **)l; char *right = *(char **)r; return strncmp(left, right, 1);}); // myCharacters is now { "Charles Condomine", "George", "TomJohn" }
3. Blocks和Cocoa
Cocoa Frameworks中的许多函数把block作为参数,典型的作用是,对一些对象的集合进行操作,或者当某个操作完成后作为回调处理,下面的例子展示了怎样在NSArray的函数 sortedArrayUsingComparator: 中使用block。该函数只使用了block一个变量,这个例子中block定义为NSComparator的本地变量。
NSArray *stringsArray = [NSArray arrayWithObjects:@"string 1",@"String 21",@"string 12",@"String 11",@"String 02", nil];static NSStringCompareOptions comparisonOptions = NSCaseInsensitiveSearch | NSNumericSearch |NSWidthInsensitiveSearch | NSForcedOrderingSearch;NSLocale *currentLocale = [NSLocale currentLocale];NSComparator finderSortBlock = ^(id string1, id string2) {NSRange string1Range = NSMakeRange(0, [string1 length]);return [string1 compare:string2 options:comparisonOptions range:string1Range locale:currentLocale];};NSArray *finderSortArray = [stringsArray sortedArrayUsingComparator:finderSortBlock];NSLog(@"finderSortArray: %@", finderSortArray);/*Output:finderSortArray: ("string 1","String 02","String 11","string 12","String 21")*/
4. __block变量
block的一个强大的特征是它能够改变同一词法作用域内的变量,使用 __block类型修饰符来标识block能够修改的变量。采用上面"Block 和 Cocoa"的例子,如下例所示,你可以使用block变量来记录字符串相同的个数,为了方便展示,下例直接使用了block并且将 currentLocal 作为block中的一个只读变量。这在Blocks和Variables一节有更详细的讨论。
NSArray *stringsArray = [NSArray arrayWithObjects: @"string 1", @"String 21", // <- @"string 12", @"String 11", @"Strîng 21", // <- @"Striñg 21", // <- @"String 02", nil]; NSLocale *currentLocale = [NSLocale currentLocale];__block NSUInteger orderedSameCount = 0; NSArray *diacriticInsensitiveSortArray = [stringsArray sortedArrayUsingComparator:^(id string1, id string2) { NSRange string1Range = NSMakeRange(0, [string1 length]); NSComparisonResult comparisonResult = [string1 compare:string2 options:NSDiacriticInsensitiveSearch range:string1Range locale:currentLocale]; if (comparisonResult == NSOrderedSame) { orderedSameCount++; } return comparisonResult;}]; NSLog(@"diacriticInsensitiveSortArray: %@", diacriticInsensitiveSortArray);NSLog(@"orderedSameCount: %d", orderedSameCount); /*Output: diacriticInsensitiveSortArray: ( "String 02", "string 1", "String 11", "string 12", "String 21", "Str\U00eeng 21", "Stri\U00f1g 21")orderedSameCount: 2*/
最后,欢迎大家远离我的微博:http://weibo.com/caryaliu
- ios开发之 开始使用blocks
- IOS开发 Blocks详解
- IOS开发 Blocks详解
- iOS之blocks操作
- 黑马程序员——ios开发基础之OC内存管理与blocks
- 【ios学习】之七、Blocks简介
- 【IOS学习】之八、Blocks的实现
- 从今天开始学习iOS开发(iOS 7版)--实现一款App之Foundation框架的使用
- iOS Blocks与Dispatch Queue的使用
- ios--Blocks与Dispatch Queue的使用
- iOS 语法之Blocks使用初级剑童篇(欢迎提建议和分享遇到的问题)
- IOS Blocks
- [ios]blocks
- Windows下使用code::blocks开发cocos2dx
- 开始进行iOS开发
- [IOS 开发] 开发该选择Blocks还是Delegates
- ios开发之 xcode使用
- iOS开发之UICollectionView使用
- 匿名内部类
- Python入门
- Geometry.h的一些方法
- NSTimer与Run loop Modes
- XP和linux 双系统怎么安装
- ios开发之 开始使用blocks
- 【养生】第一步-----筑基
- oracle直方图注意事项
- 虚幻引擎4中的实时GI技术
- Add touch listener to 3D object in unity(Unity中给3D物体添加按钮点击功能)
- java 术语
- mysql数据库 连接查询
- pku 3468
- 【养生】实用穴位疗法