20150626_OC之Block块的简单使用

本文详细介绍了 Objective-C 中的 Block 块,包括函数指针、Block 的基本用法、Block 的参数、Block 与外部变量的关系及 Block 的高级特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//
//  main.m
//  IOS150626_ObjectiveC_Block块
//
//  Created by PengJunlong on 15/6/26.
//  Copyright (c) 2015年 Peng Junlong. All rights reserved.
//

#import <Foundation/Foundation.h>

//函数指针
int add(int a, int b)   //add的类型是 int (*)(int,int)
{
    return a+b;
}
typedef int (* padd)(int,int); //padd类型是 int (*)(int,int)   函数指针

//Block是OC中的数据类型,用来保存一段代码块
typedef int(^ addBlock)(int, int);  //与函数指针的区别是^和*,Block是放在函数中使用
typedef int(^ MyBlock)(int, int);

//函数中不能再定义函数,而函数中可以定义block块
//block其实是一种数据类型,这个数据类型声明的变量里存放的值是一段代码块
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        padd funadd = add;
        NSLog(@"sum = %d",funadd(4,6));
        
        //不带参数的Block
        void (^printBlock)(void) = NULL;
        printBlock = ^(void)
        {
            NSLog(@"  *");
            NSLog(@" ***");
            NSLog(@"*****");
        };  //一定要有分号,在方法内部,是代码块,而不是方法
        printBlock();
        
        //省略(void)
        void (^printThreeRect)(void) = ^
        {
            NSLog(@"   *");
            NSLog(@"  ****");
            NSLog(@" ******");
            NSLog(@"********");
        };
        printThreeRect();
        
        //带参数的block
        int (^minusBlock)(int, int) = ^(int a, int b)
        {
            return a-b;
        };
        NSLog(@"minus = %d",minusBlock(8,3));
        
        
        //block可以直接读取block外部变量,但是不能修改;如果要修改block外部变量的值,则需要在外部变量的前面加__block修饰该变量
        __block int num = 99;
        void (^numBlock)(void) = ^
        {
            NSLog(@"%d",num);
        };
        numBlock();
        
        void (^setBlock)(int) = ^(int value)
        {
            num = value;    //修改block外部变量的值,则需要在外部变量的前面加__block修饰该变量
            NSLog(@"num = %d",num);
        };
        setBlock(100);
        
        MyBlock multiBlock = ^(int a, int b)
        {
            return a*b;
        };
        
        NSLog(@"multy = %d",multiBlock(3,7));
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值