OC block变量的理解


blcok封闭了一段代码, 可以在任何时候执行

block可以作为函数的参数,或函数的返回值, 而其本身又可以带参数和返回值

苹果官方建议多用block, 在多线程,异步任务,集合遍历,集合排序,动画转场用得很多




在这个代码中block的作用仅仅返回数值1, 断点, 反汇编代码, 查看

block变量就是一个含有函数指针类型变量的一个结构体, 前8字节是一个isa指针.  这个结构体是不透明的,所以其它变量的用途也不太清楚, 但很明显, 结构体中, 第4个成员变量

是根据我们block变量声明所生成的一个返回值为int无参的函数指针. 这个指针中存放的数值为函数的首地址 0x100000f30


再声明并定义一个有两个参数和一个返回值的块, 断点,反汇编代码,查看


同样block结构体中第4个成员变量又变成了 (int)(*)(int, int) 函数指针类型

所以我们可以简单理解, 块就是函数指针的变形使用


代码如下

//
//  main.m
//  block
//
//  Created by LiuWei on 15/4/17.
//  Copyright (c) 2015年 LiuWei. All rights reserved.
//

#import <Foundation/Foundation.h>

int main()
{
    
    // block用来保存一段代码
    // block标志^
    /*
        block保存代码
        block可以有参数
        block可以有返回值
    */
    
    // 有返回值, 不带参数的block
    int (^myblock)()=
    ^{
        return 1;
    };
   
    int k = myblock();
    NSLog(@"k = %i", k);
    
    
    // 有返回值, 带参数的block
    
    int (^myblock2)(int a, int b) =
    ^(int a, int b){
        return a + b;
    };
    
    k = myblock2(1, 2);
    NSLog(@"k = %i", k);
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值