block

修改block内部变量,如果一个变量在block外部声明的话,那个变量必须要用__block去修饰,__block不管是在ARC和MRC环境下都可以使用修饰对象和基本数据, __weak只能在ARC环境下只能修饰对象.

block循环引用:block调用了 主对象则可能发生循环使用.避免方法__weak或者__unsafe_unretained来修饰block

在声明block时,要用copy.因为block是存档在栈中,需要拷贝到堆区,防止被释放掉. 在多线程环境下,block有可能会被析构 需要将self转为strong指针.

既然上面说到了内存就简述一下:

内存基本构成:

1.静态存储区:主要是存放静态数据,全局变量和常量
2.栈去:在执行函数时,函数内部局部变量的存储单元都可以在栈上创建,函数执行完这些单元自动释放.效率高内存有限
3.堆区:动态内存.程序在运行的时候用alloc和new申请内存.生存期可以控制,如果不释放,程序结束释放掉.如果某动态内存不在使用需要立即释放掉否则内存泄露.
4.代码区:存放函数体的二进制代码
5.常量区:存放常量的字符串

你可能感兴趣的:(block)