block的使用(四)

◇◆丶佛笑我妖孽 提交于 2019-12-10 05:36:39

//  Person.h


#import <Foundation/Foundation.h>


typedef void(^blockType)();


@interface Person : NSObject

// 定义一个参数是block的方法

//- (void)test:(blockType) myblock;

- (void)test:(void(^)()) myblock;

- (blockType) test2;


@end


//

//  Person.m


#import "Person.h"


@implementation Person


- (void)test:(blockType)myblock {

    myblock();

}


- (blockType)test2 {

    return  ^{

        NSLog(@"test2");

    };

}

@end


//

//  main.m


#import <Foundation/Foundation.h>

#import "Person.h"

// block作为方法的参数,传递block参数

//void test(void(^myblock)()){

//    // 调用block

//    myblock();

//}


// block 作为方法的返回值

//void (^)() test() { // 报错

//    

//}


typedef void(^blockType)();


blockType test() {

    blockType block = ^ {

        NSLog(@"test -- block");

    };

    return block;

}



int main(int argc, const char * argv[]) {

    @autoreleasepool {

        

        void (^block1)() = ^{

            NSLog(@"*******");

            NSLog(@"*******");

        };

        

        block1();

        

        //test(block1); // 打印出两行*

        

        blockType t1 = test();

        t1(); // test -- block

        

        Person *p = [[Person alloc]init];

        // block类型作为方法的参数使用

        [p test:^{

            NSLog(@"inblock");

        }];

        

        // 返回值是block类型的方法

        blockType b1 = [p test2];

        b1();

    }

    return 0;

}


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!