10.Objective-C之Block

前言:

本小节知识点:
1.【了解】什么是Block
2.【理解】block的格式

1.Block的概念:

Block是iOS中一种比较特殊的数据类型
Block是苹果官方特别推荐使用的数据类型, 应用场景比较广泛
动画
多线程
集合遍历
网络请求回调
Block的作用
用来保存某一段代码, 可以在恰当的时间再取出来调用
功能类似于函数和方法

2.Block的格式:

Block的定义格式
返回值类型 (^block变量名)(形参列表) = ^(形参列表) {

};
image.png
block最简单形式
void (^block名)() = ^{代码块;}

例如:
void (^myBlock)() = ^{ NSLog(@"李南江"); };
block带有参数的block的定义和赋值
void (^block名称)(参数列表)
= ^ (参数列表) { // 代码实现; }

例如:
void (^myBlock)(int) = ^(int num){ NSLog(@"num = %i", num); };
带有参数和返回值的block
返回类型 (^block名称)(参数列表)
= ^ (参数列表) { // 代码实现; }

例如:
int (^myBlock)(int, int) = ^(int num1, int num2){ return num1 + num2; };
调用Block保存的代码
block变量名(实参);

3.block和typedef的使用:

由于相同的部分可以抽离出来,所以需要使用typedef:
OC的block的用法
#import <Foundation/Foundation.h>
int main(int argc,onst char * argv[])
{
    int (^sumBlock)(int,int);
    sumBlock = ^(int value1,int value2){
        return value1 + value2;
    };
    NSLog(@"sum = %i",sumBlock(20,10));
    
    int (^minBlock)(int,int);
    minBlock = ^(int value1,int value2){
        return value1 - value2;
    };
    NSLog(@"min = %i",minBlock(20,10));
    
    return 0;
}
使用typedef之后:
#import <Foundation/Foundation.h>
typedef int (^calculteBlock)(int,int);
int main(int argc,onst char * argv[])
{
    calculteBlock sumBlock = ^(int value1,int value2){
        return value1 + value2;
    };
    NSLog(@"sum = %i",sumBlock(20,10));    
    calculteBlock minBlock = ^(int value1,int value2){
        return value1 - value2;
    };
    NSLog(@"min = %i",minBlock(20,10));    
    return 0;
}

4.block的应用场景:

在学习UI之后就会体会到block的好处。
如果在block中访问了外界的对象,一定要给对象加上__block,只要加上了__block,哪怕block在堆中,也不会对外界的对象进行retain。
加了__block就是地址传递,不加__block是值传递。正因为是值传递,所以可以访问其值,或者return返回其值。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容