//
// 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;
}
|
|