黑马程序员技术交流社区

标题: BLOCK使用技巧 [打印本页]

作者: herobin    时间: 2016-1-11 13:13
标题: BLOCK使用技巧
//
//  main.m
//  block的使用技巧
//
//  Created by herobin on 16/1/6.
//  Copyright © 2016年 herobin. All rights reserved.
/*

block的使用技巧

1 xcode提供了一个助记符(inLineBlock),防止漏写格式的内容

2 block变量用作方法的参数的时候
    最好把参数类型列表部分加上,具体的形参名
    调用函数的时候直接回车两次就可以了


*/

#import <Foundation/Foundation.h>

@interface Person : NSObject

//自定义的助记符
//选中拖进右下角里面,可更改的参数 < # 标识符名字 # >      < #中间不用空格
@property (nonatomic,strong)NSString *name;
@property (nonatomic,assign)int age;


@end

@implementation Person


@end

@interface Student : NSObject
//block作为方法的参数
-(void)test:(void (^)()) myblock;    //void(^)() 表示一个类型   myblock 是形参名

//block作为方法的返回值
-(void(^)()) test2;

//block作为对象的实例变量
//@property void(^myblock1)();    //MRC下使用,不知为什么,先设成MRC
@property void(^myblock1)();
@end




@implementation Student
//block作为方法的参数
-(void)test:(void(^)()) myblock{    //void(^)() 表示一个类型
   
    //执行
    myblock();
   
}

//block作为方法的返回值
-(void(^)()) test2{

    return ^{
      
        NSLog(@"test2 in block");
    };

}


@end

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
//        block的使用技巧
//        定义有返回值,有参数的block
//        int (^myblock)(int,int) = ^(int x,int y){  };     容易写错
        
//        1 xcode提供了一个助记符(inLineBlock),防止漏写格式的内容
        int(^maxBlock)(int,int) = ^(int x,int y) {
            return x>y?x:y;
        };
        
        NSLog(@"max=%d",maxBlock(22,44));
        
        Student *stu = [Student new];
        
        
        [stu test:^{
            NSLog(@"block 作为方法的参数使用");
        }];
   
        
        //定义一个block去接收test2的返回值
        void (^blocktest2)() = [stu test2];
        blocktest2();   //执行返回的block
        
        
        stu.myblock1 = ^{
            NSLog(@"block作为类的实例变量,给实例变量赋值");
        };
        
        stu.myblock1(); //执行在后面加上括号
        
        
        
    }
    return 0;
}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2