美文网首页
10.Objective-C之Block

10.Objective-C之Block

作者: 峰子1994 | 来源:发表于2017-10-28 17:38 被阅读7次

前言:

本小节知识点:
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返回其值。

相关文章

网友评论

      本文标题:10.Objective-C之Block

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