【Objective_C】基础学习—block

遇到的问题:
1.函数双参数定义出错,中间不是加逗号,而是用and等类似词连接
2.在implementation实现阶段,函数可以引用函数,加self
3.如果类中有参数的初始化,用 Mathsclass *math = [[Mathsclass alloc]init]实现实例化
这是两次操作,也可以直接用 Mathsclass *math = [Mathsclass new],一次操作完成
4.实例变量如果没有添加修饰符,则默认是@protected形式,如果想在main访问,可以用@public修饰

block:
块可以实现闭包。闭包允许一个函数访问声明该函数运行上下文中的变量,甚至可以访问不同运行上文中的变量
代码块主要有两种类型的绑定:自动型与托管型。自动绑定使用的是栈中的内存,而托管是托管堆创建的。
代码块其实是由C语言实现的,所以它们在各种以C作为基础的语言内都是有效的,包括Objective-C、C++以及Objective-C++。
block同样可以访问全局变量,即使是static
block外的变量引用,block默认是将其复制到其数据结构中来实现访问的.

在block中可以使用和改变全局变量,而局部变量可以使用,但是不能改变。
通过block进行闭包的变量是const的。也就是说不能在block中直接修改这些变量
但是如果用__block关键字来声明变量,这样就可以在block中修改变量了。
用__block修饰的外部变量引用,block是复制其引用地址来实现访问的
copy( )和dispose( )
如果想要在以后继续使用某个block,就必须要对该block进行拷贝操作,即从栈空间复制到堆空间。所以拷贝操作就需要调用Block_copy()函数,block的descriptor中有一个copy()辅助函数,该函数在Block_copy()中执行,用于当block需要拷贝对象的时候,拷贝辅助函数会retain住已经拷贝的对象。
与Block_copy()对应的函数是Block_release(),就是释放不需要再使用的block,block的descriptor中有一个dispose()辅助函数,该函数在Block_release()中执行,负责做和copy()辅助函数相反的操作,如释放掉所有在block中拷贝的变量
如果代码块想要递归调用,代码块变量必须是全局变量或者是静态变量,这样在程序启动的时候代码块变量就进行初始化,可以实现递归调用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值