Objective-C基础10 :代码块

代码块是对函数的一种扩展,但是比c语言中的函数指针高级多了。

1.声明和定义。returnType (^blockName)(list of arg) = ^returnType(list of arg){body;};

其中右边的returnType可以省略,因为编译器可以通过代码块的声明来推断函数的返回值;如果代码块没有参数右边的list of arg也可以省略。

int (^square)(int number) = ^int(int number){ return number * number;}; //没有省略返回值

int (^square)(int number) = ^(int number){return number * number;}; //省略返回值

void (^theBlock)() = ^{ printf("Hello Blocks!\n"); };//最简单的形式,没有返回值和参数列表

2.如何使用代码块。

1)可以像函数一样直接调用,并且代码块可以访问跟它作用域一样的局部变量。

 int value = 6;
 int (^multiply_block)(int number) =  ^(int number) {return (value * number);};
 int result = multiply_block(7);
 printf("Result = %d\n", result);

2)可以在需要需要传递函数作为参数的地方使用代码块。

        NSArray *array = [NSArray arrayWithObjects:@"Amir", @"Mishal", @"Irrum", @"Adam", nil];
        NSLog(@"Unsorted Array %@", array);
        NSArray *sortedArray = [array sortedArrayUsingComparator:^(NSString *object1, NSString *object2) {
            return [object1 compare:object2];
        }];
        NSLog(@"Sorted Array %@", sortedArray);

3)代码块可以跟函数指针一样使用typedef 。

typedef double (^MKSampleMultiply2BlockRef)(double c, double d);

int main(int argc, const char * argv[])
{
    MKSampleMultiply2BlockRef multiply2 = ^(double c, double d) { return c * d; };
    printf("%f, %f", multiply2(4, 5), multiply2(5, 2));
    return 0;
}
时间: 2024-10-25 03:03:17

Objective-C基础10 :代码块的相关文章

Oracle实践--PL/SQL基础之代码块

PL/SQL基础入门之代码块 PL/SQL:过程语言(Procedure  Language)和结构化语言(Structured Query Language)结合而成的编程语言,是对SQL的扩展,支持多种数据类型,如大对象和集合类型,可使用条件和循环等控制语句,可创建存储过程,程序包和触发器等,给sql语句的执行添加程序逻辑,与Oracle服务器和Oracle工具紧密集成,具有可移植性,灵活性和安全性. 优点: 1.       支持SQL,可以使用:DML,DCL,游标控制和SQL运算符 2

初学Objective - C语法之代码块(block)

一.block声明 1.无参数,无返回值: void (^sayHi)(); 2.有参数,有返回值: NSInteger (^operateOfValue)(NSInteger num); block的声明:返回值类型(^block变量名)(参数列表) 脱字符(^)是块的语法标记 二.block实现 block变量名 = ^返回值类型(参数列表) 1.  sayHi = ^{ NSLog(@"你好"); }; 2. operateOfValue = ^ NSInteger (NSInt

java基础_代码块

1. 局部代码块 位置: 方法中 作用: 限定变量生命周期,及早释放,提高内存利用率. 2. 构造代码块 位置: 类中 作用: 多个构造方法中相同的代码存放到一起,每次调用构造时都执行,并且在构造方法前执行! 3. 静态代码块 位置: 类中方法外,static修饰 作用: 用于给类进行初始化,在加载的时候就执行,并且值执行一次. 4. 同步代码块 位置:方法中 作用:  使用 synchronized 关键字修饰,并使用"{}"括起来的代码片段,它表示同一时间只能有一个线程进入到该方法

JavaSE8基础 构造代码块简单示例

os :windows7 x64    jdk:jdk-8u131-windows-x64    ide:Eclipse Oxygen Release (4.7.0) 代码: class Test { //在类中的成员位置,多个构造函数的公共代码放在这里面 { //构造代码块中 //对象进行初始化 会调用 System.out.println("调用构造函数时,构造代码块中的代码先执行"); } public Test() { System.out.println("无参数构

JavaSE8基础 静态代码块 简单示例

os :windows7 x64    jdk:jdk-8u131-windows-x64    ide:Eclipse Oxygen Release (4.7.0) 代码: class Test { /* * 在类中的成员位置,要用static修饰 * 可以对类进行初始化,而不是对对象进行初始化.在对象未有之前,他已存在. * 只执行一次 */ static{ //静态代码块中 System.out.println("静态代码块中的代码先执行,且只会执行一次"); } public

java基础复习一、代码块执行顺序

1 /** 2 * 代码块执行顺序的测试 3 * 执行顺序 静态代码块>main代码块>构造代码块>构造函数>普通代码块 4 * @author Administrator 5 * 6 */ 7 public class ClassDemo01 { 8 static { 9 System.out.println("这是一个静态代码块"); 10 } 11 { 12 System.out.println("这是一个构造代码块"); 13 } 1

[nRF51822] 10、基础实验代码解析大全 · 实验15 - RTC

一.实验内容: 配置NRF51822 的RTC0 的TICK 频率为8Hz,COMPARE0 匹配事件触发周期为3 秒,并使能了TICK 和COMPARE0 中断. TICK 中断中驱动指示灯D1 翻转状态, 即指示灯D1 以8Hz 的速率翻转状态 COMPARE0 中断中点亮指示灯D2 二.nRF51822的内部RTC结构: NRF51822 有两个RTC 时钟:RTC0,RTC1.两个RTC 均为24 位,使用LFCLK 低频时钟,并带有12 位分频器,可产生TICK.compare 和溢出

【Java基础】Java中的代码块

什么是代码块 在Java中,用{}括起来的代码称之为代码块. 代码块分类 局部代码块:在局部变量位置且用{}括起来的代码,用于限制局部变量的生命周期. 构造代码块:在类中的成员变量位置并用{}括起来的代码,和构造方法处于同一个层级,且每次调用构造方法前会调用一次,故称之为构造代码块. 静态代码块:在类中的成员变量位置并用{}括起来的代码,但是{}前需要加一个static关键字 有何区别 局部代码块用在局部位置,用于限定生命周期. 构造代码块出现的目的是可以将多个构造方法中相同的代码放在一起,每次

objective c 代码块blocks完整总结一

在ios4之后,引入了代码块的特性,在gcd中会经常的用到,所以决定好好的看看代码块文档,把这块总结一下.从头开始讲解代码块. 1.声明和使用代码块 一般用^操作符声明一个块变量,并作为块的开始符.而块的本身用{}包括起来,就像下面那样. int multiplier = 7; int (^myBlock)(int) = ^(int num) { return num * multiplier; }; int(^myblocks)(int)=(^int  num){return num * mu