block系列重新整理1

来源:互联网 发布:初学编程怎么学 编辑:程序博客网 时间:2024/03/28 23:15

Main.m

#import <Foundation/Foundation.h>#import "Person.h"int sum(int a, int b){    return a+b;}int main(int argc, const char * argv[]){    @autoreleasepool {        //------------------函数指针------------------        //声明一个函数指针        int (*p)(int,int);        //对函数指针赋值(实现)        p = sum;        //调用函数指针        int result = p(1,3);                printf("result:%d\n",result);                //声明一个block,前面的int是block的返回值类型,myBlock是block的名字或者叫做变量,后面的两个int参数是形式参数        int (^myBlock)(int,int);        //实现一个block        myBlock = ^(int a,int b){            return a+b;        };                int (^myBlock1)(int,int) = ^(int a, int b){            return a-b;        };        //调用block        result = myBlock(10, 20);        printf("myBlock:result:%d\n",result);        result = myBlock1(6,3);        printf("myBlock1:result:%d\n",result);                /*----------------演示void block-----------------*/        //1、声明和实现        void (^voidBlcok)() = ^{            printf("void block");        };        //2、调用        voidBlcok();                /*--------------Person类中与main函数回掉------------*/        Person *ps = [[Person alloc] init];        [ps testMethod:^{            printf("main ps");        }];                result = [ps testMethod1:^int(int a, int b) {            return a*b;        }];        printf("ps:testMethod1:result:%d\n",result);                result = [ps testMethod2:^int(int a, int b) {            return a*b;        }];        printf("ps:testMethod2:result:%d\n",result);                        //实现block,最好直接按回车键,如果自己写不太方便,容易出错        PersonBlock personBlock = ^(int a, int b){            return a*b+10;        };                result = [ps testMethod2:personBlock];        printf("ps:testMethod2:result:%d\n",result);            }    return 0;}
Person.h

typedef int(^PersonBlock)(int,int);@interface Person : NSObject//不带参数也没有返回值的block作为函数参数- (void)testMethod:(void(^)())block;//返回一个整形,并且有两个整形参数作为blok的参数- (int)testMethod1:(int(^)(int,int))block;//使用PersonBlock类型做为参数- (int)testMethod2:(PersonBlock)block;

Person.m

- (void)testMethod:(void(^)())block{    NSLog(@"Person testMethod");    block();}- (int)testMethod1:(int(^)(int,int))block{    return block(10,10);}- (int)testMethod2:(PersonBlock)block{        return block(30,40);}



0 0