iOS 块

作者: Mariko00o | 来源:发表于2020-04-04 17:13 被阅读0次

1.块就是一个实现的闭包(closure),一个允许访问其常规范围之外的变量的函数。

2.一个Objective-C块实际上就是一个对象,它是NSObject类的子类,拥有NSObject类的所有相关属性(如向块发送消息)。

块的语法

1. 声明块类型的语法

块类型由返回值类型和参数类型列表构成。使用脱字符(^)声明块类型的变量。

returnType (^blockName) (parameterType,parameterType,...)

例子:

int (^oneParamBlock)(int);
void (^twoParamsBlock)(int,int);//没有返回值
void (^twoParamsBlock)(int param1,int param2);//与方法声明类似,快变量声明可以含有参数名称
int (^noParamsBlock)(void);//没有参数

2. 块类型

通过typedef语句,创建类型定义为块类型提供别名,起到简化块类型变量名称的作用。

typedef returnType(^name)(arguments);

方法声明中的块变量:

typedef int(^AdderBlock)(int);
@interface Atom : NSObject
-(int)process:(int)count withBlock:(AdderBlock)adder;
@end

3. 块常量表达式

使用块常量表达式可以定义对块的引用。

^returnType(参数类型 参数名称,...){//块代码}

该表达式开头的脱字符表名这个表达式是一个块常量表达式。

例:

//1.块常量表达式
^int (int a){
return  a + 1;
};
//2.没有设置返回值类型的块常量表达式
^ (int a){
    return  a + 1;
};
//3.不带参数的块常量表达式
^ {
    NSLog(@"Hello, World");
};

可以将块常量赋予块变量:

int (^myBlock)(int);
myBlock = ^int (int param){
    return param * param;
};

可以将块声明和块定义组合到一条语句中:

int (^myBlock)(int) = ^int (int param){
    return param * param;
};

4. 调用

只有调用块时,才会执行其{}体内的代码

声明了块类型变量并赋予块常量后,就可以直接调用操作符调用该变量。

int a = myBlock(5);
NSLog(@"a is %d",a);
//打印:a is 25

5. __block

默认情况下,块常量表达式可以访问局部变量,但不能修改局部变量。使用__block修饰局部变量,可以修改局部变。

__block int myVar = 10;
void (^intBlock)(int) = ^(int amount){
    myVar += amount;
    NSLog(@"New value = %d",myVar);
};
intBlock(5);

当引用变量的块被复制到堆存储区域时,使用__block修改符的变量也会被复制到堆存储区域。

相关文章

  • iOS Xcode自定义代码块以及迁移

    iOS Xcode自定义代码块以及迁移 iOS Xcode自定义代码块以及迁移

  • 一篇文章看懂iOS代码块Block

    一篇文章看懂iOS代码块Block 一篇文章看懂iOS代码块Block

  • iOS 块

    块 1.块就是一个实现的闭包(closure),一个允许访问其常规范围之外的变量的函数。2.一个Objective...

  • iOS-2 Block

    block块 系列文章: iOS Block浅浅析 - 简书 iOS Block实现原理 iOS Block __...

  • iOS 注释方法大全 代码块加快捷键注释

    iOS 注释方法大全 代码块加快捷键注释 iOS 注释方法大全 代码块加快捷键注释

  • iOS开发-学会使用代码块,提高你的开发效率

    iOS开发-学会使用代码块,提高你的开发效率 iOS开发-学会使用代码块,提高你的开发效率

  • iOS-Block的详解

    学习Block的感悟 一. iOS代码块Block 1.1 概述 代码块Block是苹果在iOS4开始引入的对C语...

  • Block

    block.png iOS代码块Block 概述 代码块Block是苹果在iOS4开始引入的对C语言的扩展,用来实...

  • iOS代码块

    居上位者,心要黑,剑也要黑。心够黑,才能审度真正的利益,剑够黑,才能决断必要的牺牲。 ————古凌逝烟 如何提高自...

  • iOS代码块

    @property(nonatomic,weak) <#Class#> *<#object#>;

网友评论

      本文标题:iOS 块

      本文链接:https://www.haomeiwen.com/subject/euijphtx.html