iOS笔记 Block和内存管理
来源:互联网 发布:excel如何将拆分数据 编辑:程序博客网 时间:2024/05/16 10:47
1.在块声明的范围里,所有变量都可以被它使用,不过不能修改。想要修改怎么办?可以在变量声明是加上__block。
2.如果块中使用的变量是对象类型,那么就会自动保留它。系统在释放这个块的时候,也会一并释放。
3.如果块定义在Ojective-C类的实例方法中,那么除了可以访问类的所有实例变量之外,还可以使用self变量。
块总能修改实例变量,并不需要在声明时加__block。
4.在块中使用实例变量如(_name),_name <=> self->_name,块也会保留self,可能到致循环应用
5.块默认是分配在栈上的,也就是说块只在定义它的范围里有效。
这个块就可能引发一些产生一些奇怪的问题。要避免这个问题,可以将block复制到堆上。
2.如果块中使用的变量是对象类型,那么就会自动保留它。系统在释放这个块的时候,也会一并释放。
3.如果块定义在Ojective-C类的实例方法中,那么除了可以访问类的所有实例变量之外,还可以使用self变量。
块总能修改实例变量,并不需要在声明时加__block。
4.在块中使用实例变量如(_name),_name <=> self->_name,块也会保留self,可能到致循环应用
5.块默认是分配在栈上的,也就是说块只在定义它的范围里有效。
void(^block)();if(/**some condition*/){block = ^{NSLog(@"Block A")};}else{block = ^{NSLog(@"Block B")};}block();定义在if及else语句中的两个块都分配在栈内存中。出了其作用域以后,栈中的内存可能被编译器覆盖掉。再去调用
这个块就可能引发一些产生一些奇怪的问题。要避免这个问题,可以将block复制到堆上。
void(^block)();if(/**some condition*/){block = [^{NSLog(@"Block A")} copy];}else{block = [^{NSLog(@"Block B")} copy];}block();
0 0
- iOS笔记 Block和内存管理
- 内存管理和 Block
- iOS的block内存管理
- iOS-Block和变量的内存管理(二)
- iOS-Block和对象的内存管理(三)
- IOS开发之Block的使用和内存管理
- Block和变量,内存管理
- iOS关于block的内存管理
- iOS内存管理---block机制详解
- iOS学习之Block内存管理详解
- iOS笔记:内存管理
- iOS笔记:内存管理
- iOS 内存管理笔记
- IOS内存管理笔记
- block 知识点 ---- Objective-C 高级编程 iOS 与 OS X 多线程内存管理 学习笔记
- 【Objective-C高级编程】iOS与OS X多线程和内存管理(三) Block语法
- 【Objective-C高级编程】iOS与OS X多线程和内存管理(四) Block的实现
- 【Objective-C高级编程】iOS与OS X多线程和内存管理(九) Block 循环引用
- hdu 5374 Tetris(模拟)
- 在字符串中找出连续最长的数字串
- Android studio 快捷键汇总
- 大数据全栈式开发语言 – Python
- 算法题:求一个整数的开方
- iOS笔记 Block和内存管理
- POJ 2456 Aggressive cows(二分)
- 找到并留住富有激情的问题解决者
- 8.12总结
- java ------ IO(从基础到加强)
- 数据解析
- 自定义progressDialog~~~
- 原码, 反码, 补码 详解
- hdu 5375 Gray code(dp)