Block语法及页面传值
2015-11-14 00:00
323 查看
摘要: block在iOS中应用很是常见,一个比较常用的就是页面间的传值
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变量
Block访问外部变量
Block可以访问和修改全局变量,但是只能访问局部变量不能修改局部变量,若要修改局部变量要对局部变量外加__block修饰。
(2)实现函数回调功能(即调用)
(3)用于页面之间的通信,同时可以传值
block页面传值的好处:不用设置代理,取代了代理的作用
简单叙述页面传值的步骤
Block的内存问题
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()
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- Ruby中Block和迭代器的使用讲解
- Ruby中使用Block、Proc、lambda实现闭包
- Ruby中的block、proc、lambda区别总结
- asp.net Context.Handler 页面间传值方法第1/2页
- ASP.NET 页面之间传递值方式优缺点比较
- asp.net页面传值测试实例代码(前后台)
- asp.net 页面传值的几个方法
- 讲解iOS开发中基本的定位功能实现
- js判断客户端是iOS还是Android等移动终端的方法
- IOS开发环境windows化攻略
- 检测iOS设备是否越狱的方法
- .net平台推送ios消息的实现方法
- 基于Jquery ajax技术实现间隔N秒向某页面传值