您的位置:首页 > 移动开发 > IOS开发

Block语法及页面传值

2015-11-14 00:00 323 查看
摘要: block在iOS中应用很是常见,一个比较常用的就是页面间的传值

Block高级

Block:块语法,本质上是匿名函数,标准的C里面是没有Block的,C语言的后期扩展版本加入了匿名函数
Block语法:
int(^myBlock)(int) = ^(int a){ return a;};
myBlock是block变量,^符号是将myBlock声明为一个块对象 int(^)(int)是myBlock的类型。 ^(int a){return a;};是Block值
Block进行typedef
typedef int(^BlockType)(int a,int b)
原类型:int(^)(int a,int b)
新类型:BlockType
采用新类型声明Block变量
BlockType block = ^(int a,int b){ return a+b;};

Block访问外部变量
Block可以访问和修改全局变量,但是只能访问局部变量不能修改局部变量,若要修改局部变量要对局部变量外加__block修饰。

Block的应用

(1)使用block进行数组排序
(2)实现函数回调功能(即调用)
(3)用于页面之间的通信,同时可以传值
block页面传值的好处:不用设置代理,取代了代理的作用
简单叙述页面传值的步骤
在第二个页面声明block变量,当第一个页面跳转至第二个页面时,创
建第二个页面后也给第二个页面的block变量赋值(块内部实现可将第
二个页面的值传至第一个页面),然后在第二个页面回调改函数

Block的内存问题
定义属性接受Block,必须使用copy修饰,retain和assign会造成野指针的问题。因为Block在某个方法中定义时存储在了栈区,在另一个类中使用时要创建是存储在堆区所以应该使用copy修饰。
在block的实现部分,不能直接食用实例变量,self调用属性,因为block会造成self引用计数加1,导致循环引用问题。
MRC写法:__block typeof(self) BlockSelf = self;
ARC写法:__weak typeof(self) WeakSelf = self;
在dealloc中要使用对应的Block_release()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  block iOS 页面传值