一、
0、为什么不使用方法来保存代码,要使用block
(1)方法封装代码一开始就写死了,而不能在某个方法内部创建block保存一段代码,并且根据不同的需求调用不同的代码
1.类似于指向函数的指针
2、block的定义格式
(1)没参数,没返回值
(2)有参数,没返回值
(3)有参数,有返回值
3、block默认情况下保存在栈中,block里面引用对象会自动释放,使用copy会保存到堆中,会对里面的对象retain一次,强引用。
4、block默认情况下不能修改外界的数据,除非使用__block 关键字修饰
5、block参数传递
(1)默认情况下:值传递
(2)加上__block后,地址传递
6、为什么定义block的时候要使用copy修饰:
(1)在定义好block时候不一定立刻使用,当使用到的时候可能内部的对象已经被释放了,所以使用copy,强引用,保证对象不被释放;
7、使用typedef 给block取别名
二、OC代码转C++
1、命令 : clang -rewrite-objectc
三、使用block封装思想
1、定义一个block作为对象的属性,在适当的时候(例如初始化,懒加载)给block传递一段代码
2、在适当的时候(例如:点击,触发事件等)调用对象的block,执行封装的代码
四、区别__block和__weak的作用
(1)__block修饰的对象,就算在堆中,在block内部不会进行retain
(2)__weak修饰的对象,如果在堆中,在block内部还是会retain,只是把引用改成了弱引用。