block 開(kāi)發(fā)中使用場(chǎng)景 適合新手理解 熟悉 運(yùn)用到項(xiàng)目中
block開(kāi)發(fā)中使用場(chǎng)景
// 1.把block保存到對(duì)象中,恰當(dāng)時(shí)機(jī)的時(shí)候才去調(diào)用
// 2.把block當(dāng)做方法的參數(shù)使用,外界不調(diào)用,都是方法內(nèi)部去調(diào)用,Block實(shí)現(xiàn)交給外界決定.
// 3.把block當(dāng)做方法的返回值,目的就是為了代替方法.,block交給內(nèi)部實(shí)現(xiàn),外界不需要知道Block怎么實(shí)現(xiàn),只管調(diào)用
1.把block保存到對(duì)象中,恰當(dāng)時(shí)機(jī)的時(shí)候才去調(diào)用
- (void)block1
{
Person *p = [[Person alloc] init];
void(^block)() = ^() {
NSLog(@"執(zhí)行對(duì)象中block");
};
p.operation = ^(){
NSLog(@"執(zhí)行對(duì)象中block");
};
p.operation = block;
_p = p;
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
_p.operation();
}
2.把block當(dāng)做方法的參數(shù)使用,外界不調(diào)用,都是方法內(nèi)部去調(diào)用,Block實(shí)現(xiàn)交給外界決定.
- (void)block2
{
Person *p = [[Person alloc] init];
void(^block)() = ^{
NSLog(@"吃東西");
};
[p eat:block];
// 傳入block給參數(shù)的Block賦值
[p eat:^{
NSLog(@"吃東西");
}];
}
person:
- (void)eat:(void (^)())block
{
/**
block = ^{
NSLog(@"吃東西");
};
*/
block();
}
3.把block當(dāng)做方法的返回值,目的就是為了代替方法.,block交給內(nèi)部實(shí)現(xiàn),外界不需要知道Block怎么實(shí)現(xiàn),只管調(diào)用
- (void)block3
{
Person *p = [[Person alloc] init];
[p run:2];
p.run(2);
void(^run)() = p.run;
run();
}
Person:
- (void (^)(int))run
{
return ^(int meter){
NSLog(@"跑了%d米",meter);
};
}