/*
// 函数调用
NSLog(@"%d", sum(3, 5));
// block block为匿名函数,也是一种类型,block里面存储的是函数体。“{函数体}”
// block 的定义,根据类型定义
int (^block1)(int a, int b) = ^(int x, int y){
return x + y;
};
// block 类型 int(^)(int a, int b)具有两个整形参数,一个整形返回值的 block类型
// int a float a
// block1 变量名
// ^(int x, int y){ return x + y; }; 值
// block变量的使用和函数使用一样变量名 +参数
NSLog(@"%d", block1(3, 5));
// 练习:定义个block,block功能是把整形数字,转化为字符串
NSString *(^block2)(int a) = ^(int a){
return [NSString stringWithFormat:@"%d",a];
};
NSLog(@"%@",block2(5));
*/
// block 的好处
// 1. 用于回调
// 2. 作为函数的参数,回调
// 注意: block类型的语义修饰为 copy,原因,把栈区的block参数,拷贝到堆区。
@property (nonatomic,copy) XLBlock string;
//MRC 写法
// 对self不进行强引用, 不进行retain
__blocktypeof(self) BlockSelf =self;
// ARC 写法
//__weak typeof(self) WeakSelf = self;
secondVC.value = ^(NSString *string){
// 把第二个界面的textField.text赋值给第一个界面的textField.text
BlockSelf.textField.text = string;
};
MRC释放
- (void)dealloc {
// block 释放的方式,使用释放函数释放
Block_release(_myblock);
[superdealloc];
}
iOS: 定义 Block
定义
1
2
3
4
|
typedef
void
(^RFAudioBasicBlock) (
void
);
typedef
void
(^RFAudioSuccessBlock) (BOOL flag);
typedef
void
(^RFAudioSuccessDetailBlock) (BOOL flag, NSURL *url, NSTimeInterval duration);
typedef
void
(^RFAudioSuccessURLBlock) (BOOL flag, NSURL *url);
|
作为参数
1
|
- (
void
)playWithURL:(NSURL *)url finishedBlock:(RFAudioSuccessDetailBlock)block;
|
使用
1
2
3
|
[[RFAudioManager defaultManager] playWithURL:url finishedBlock:^(BOOL flag, NSURL *url) {
NSLog(
@"播放结束:%@"
, url);
}];
|