OC学习-block处理
来源:互联网 发布:矩阵qr分解 编辑:程序博客网 时间:2024/05/16 17:02
在C++中存在回调函数,那么在OC中也应该有回调函数,而最初了解的是协议,其中的协议和回调很相似,但是又有差别,协议必须继承协议才能使用协议,同时也必须签订协议方有效;
而在使用OC过程中发现很多API函数中涉及到一个block的东东,和C++中的回调函数是一样的处理方式,故猜测应该就是所谓的回调函数吧,但是网上查找相关资料发现大家都叫它代码块,也许是因为这其中的代码可以到处存放吧;
网上查找资料学习了下,自己总结下,主要用途有下面几种:
1、函数中加入代码块,同时使用外部变量:
__block int local =500;
void(^block)(void) = ^(void)
{
local++;
NSLog(@"local:%d", local);
};
block();
NSLog(@"local:%d", local);
2、函数外代码块,在函数内部使用:(另外也是C++中所说的递归)
static void (^const countBlock)(int ,NSString*) = ^(int index,NSString* name){
if(index > 0)
{
NSLog(@"%d= %@",index, [namesubstringToIndex: index]);
countBlock(index -1,name);
}
};
countBlock(4,@"ceshi");
3、函数参数中加入代码块:
使用过OC的人都看到过这个api函数:
[UIView animateWithDuration:<#(NSTimeInterval)#> animations:<#^(void)animations#> completion:<#^(BOOL finished)completion#>];
这其中就是使用代码块作为参数进行处理的,不过我有点没弄明白就是为什么它只对固定的几种形式处理有效,而在里面做某些事情的时候它无效;
声明函数:
- (int) objcMethod:( int (^) (int) ) square
{
NSLog(@"kkkkk");
return square(4);
}
在另外一个函数中调用:
int number = [selfobjcMethod:^int(int name) {
return (name+5);
}];
NSLog(@"%d",number);
现在我所需要用到的就是上面三种情况,所以暂时研究了这几个,在研究的过程中我发现,只有代码块作为参数的时候,才能在代码块中使用self来使用类成员变量,而其他的几种情况都不能使用类成员变量,同时若需要使用外部变量,也必须是将代码块写在函数体中,然后使用关键字__block声明变量才行,否则会报错;
学会使用这个的时候,发现在某些逻辑上用起来还是挺方便的,以前害怕这些逻辑,现在学习了倒是挺喜欢的,哈哈!
- OC学习-block处理
- OC学习--Block
- OC学习-block
- OC学习那些事:Block
- OC学习笔记之block
- 黑马学习视频-OC-block
- OC学习:block类型数据
- OC学习笔记八 Block
- OC学习 第十三节 block
- OC 学习 字符串处理
- (转)OC学习那些事:Block
- 黑马程序员:OC学习日记之block
- OC学习之 block与Protocol
- OC学习笔记十---Block与@protocol
- OC学习总结之block、category
- 学习笔记:OC的数据类型 block 使用
- IOS—OC学习六—block
- OC学习笔记(1) - block
- Mapreduce中Combiner的使用以及注意点
- 数据结构线性表的两种存储形式顺序表和单链表的比较
- 关于 android 中 postDelayed方法的讲解
- Android App打包自动生成版本号Versin Name与Version Code方法之完美方案
- FreeMarker与SpringMVC整合实例代码教程
- OC学习-block处理
- 百度地图集成
- poj-3267 The Cow Lexicon【dp】
- AccountManager
- OMAPL138upp
- 使用unbound在RHEL7上搭建DNS服务
- 数学符号读法及常用符号英文
- android:inputType常用取值
- Spring定时器配置的两种实现方式OpenSymphony Quartz和java Timer详解