上面第一部分说明了block的使用
当你明白了block这个玩意的时候,你会不会有疑问?
** 其实我们平常要做到的东西用正常代码就能做到,为什么还要用代码块?它可不简单啊! **
如果你没有这样的疑问,那么,能证明两点
1、你完全明白Block的用途,你知道在什么情况下会去用它(那你还看我这个干嘛!)
2、你根本就不明白Block这个东西,那你需要: iOS 之 Block 的使用 (一) 看看这个!
当然,对于大神来说,怎么样用它都可以,这不在我的能力范围之内....
OK,进入正题!
我呢,使用Block是为了简化被调用类传递数据到主调用类的,说白了就是代替代理,因为我觉得麻烦。
可是首先告诉大家,必须管理好内存,如果没有这个信心的话还是乖乖的使用代理吧。
例子:
BlockDemo.h
// 这里定义一个方法,会用到Block
- (void) show:(void(^)(BOOL finished))completion;
//当然要把Block定义出来
@property (nonatomic, strong) void (^completion)(BOOL cancelled);
BlockDemo.m
- (void) show:(void(^)(BOOL finished))completion{
if (completion){
_completion = completion;
}
BOOLfinished = Yes; // 这一段是随意的位置的,可以不在这个方法内,因为我们定义这个Block是整个类中公用的
if(self.completion){
self.completion(finished);// **标记A** 只有在这里的时候,才会真正的开始使用Block。
}
}
如果你看到这里迷惑了,我来跟各位打个比方吧,你可以将Block看做是一个int型的变量, int completionBlock。
这相当于我们定义一个方法,在其他类(或者本类)使用的时候需要传入completionBlock, 因为我们希望这个参数将来能在整个类中使用,
我们定义一个公共参数 @property (nonatomic, assign) int completionBlock;
在实现方法里,我们实现这个方法的时候将传入的参数赋值给我们公用变量。
然后在任何时候使用这个公用变量。
这样是不是能更明白一点呢?
那就继续看下面我们是如何使用它的。
UseBlockDemo.h
@class BlockDemo;
BlockDemo *blockDemo;
UseBlockDemo.m
blockDemo = [[BlockDemo alloc] init];
[blockDemo show:^(BOOL finished){
if(finished){
NSlog(@"finished");
}
}];//什么时候会调用这里的代码呢?就在上面的<span style="font-family: Arial, Helvetica, sans-serif;">BlockDemo的 **标记A** 那里</span>
到此为止了,以上就讲了我本人主要想使用和学习Block的原因,如果你跟我的目标相同,那么恭喜,你已经达到目标了,我可不知道你不择手段没有啊
其他的用法我目前还没有接触到,也没有看到过,我自己也研究过,可我的路到此为止了。希望你们能研究出来更多的用法,到时候可不要忘了无私的我TAT!
如果你从iOS 之 Block 的使用 (一)开始认真看到了现在这里,那么我以为,如果你的理解能力在正常人范围之内的话,应该已经完全理解了Block的内容
如果你还是不理解... 请再认真看看,我想你会理解的... 如果还是不理解,那么你可以联系我,评论还是留言还是私信我都会认真回复的