【Objective-C高级编程】iOS与OS X多线程和内存管理(二)
2014-03-19 22:21
543 查看
1.属性声明与所有权修饰符的对应关系
属性声明: 所有权修饰符
assign :__unsafe_unretained
copy :__strong
retain :__strong
strong :__strong
unsafe_unretained :__unsafe_unretained
weak :__weak
2. 除__unsafe_unretained 修饰符外,__strong/__weak/__autoreleasing修饰符保证其指定的变量初始化为nil;
3.
以上这种赋值是非常危险的,因为由malloc函数分配的内存区域没有被初始化为0,因此nil会被赋值给附有__strong修饰符的并被赋值了随机地址的变量中,从而释放一个不存在的对象。在分配内存的时候推荐使用calloc。用malloc函数分配后可用memset函数将内存填充为0;
4. 简单的用free函数废弃了数组用内存块的情况下,数组各元素所赋值的对象不能再次释放,从而引起内存泄漏。
因为在静态数组中,编译器能够根据变量的作用域自动插入释放复制对象的代码,而在动态数组中,编译器不能确定数组的生存周期,所以无从处理。
5. ARC由一下工具来实现:
clang(LLVM编译器)3.0以上
objc4 Objective-C 运行时库493.9以上
6. __weak 修饰符的变量所引用的对象被废弃,则将nil赋值给该变量这一功能即被实现。
由此可知,如果大量使用附有__weak 修饰符的变量,则会消耗相应的cpu资源。
7.__weak 修饰符变量所引用的对象被注册到autoreleasepool 中。
属性声明: 所有权修饰符
assign :__unsafe_unretained
copy :__strong
retain :__strong
strong :__strong
unsafe_unretained :__unsafe_unretained
weak :__weak
2. 除__unsafe_unretained 修饰符外,__strong/__weak/__autoreleasing修饰符保证其指定的变量初始化为nil;
3.
array = (id __strong *)malloc(sizeof(id) * entries); for (NSUIntegre i = 0; i < entries; i++) array[i] = nil;
以上这种赋值是非常危险的,因为由malloc函数分配的内存区域没有被初始化为0,因此nil会被赋值给附有__strong修饰符的并被赋值了随机地址的变量中,从而释放一个不存在的对象。在分配内存的时候推荐使用calloc。用malloc函数分配后可用memset函数将内存填充为0;
4. 简单的用free函数废弃了数组用内存块的情况下,数组各元素所赋值的对象不能再次释放,从而引起内存泄漏。
因为在静态数组中,编译器能够根据变量的作用域自动插入释放复制对象的代码,而在动态数组中,编译器不能确定数组的生存周期,所以无从处理。
for (NSUIntegre i = 0; i < entries; i++) array[i] = nil; free(array);
5. ARC由一下工具来实现:
clang(LLVM编译器)3.0以上
objc4 Objective-C 运行时库493.9以上
6. __weak 修饰符的变量所引用的对象被废弃,则将nil赋值给该变量这一功能即被实现。
由此可知,如果大量使用附有__weak 修饰符的变量,则会消耗相应的cpu资源。
7.__weak 修饰符变量所引用的对象被注册到autoreleasepool 中。
{ id __weak o = obj; NSLog(@"1 %@", o); NSLog(@"2 %@", o); NSLog(@"3 %@", o); NSLog(@"4 %@", o); NSLog(@"5 %@", o); } // 变量o 所赋值的对象也就注册到autoreleasepool中5次。 { id __weak o = obj; id tmp = 0; NSLog(@"1 %@", o); NSLog(@"2 %@", o); NSLog(@"3 %@", o); NSLog(@"4 %@", o); NSLog(@"5 %@", o); }
相关文章推荐
- 解决object、embed在div层下的方法
- javax.servlet.jsp.JspTagException: Neither BindingResult nor plain target object for bean (蛋疼死我了)
- [Rational Rose 2007]解决启动报”解决无法启动此程序因为丢失suite objects.dll“的问题
- 第一章 Objective-C语言简介
- 【Objective-C高级编程】iOS与OS X多线程和内存管理
- 关于cannot open shared object file: No such file or directory 的解决。
- underscore学习笔记—对象函数/Objects(一)
- 初学者必学文档:Objective-C语法入门(1)
- NSMutableArray removeObject
- _beginthreadex使用WaitForMultipleObjects等待退出的问题
- org.hibernate.TransientObjectException: The instance was not associated with this session解决方法
- objective-c中的特性
- python import 包问题:TypeError: 'module' object is not callable
- Objective-C基础教程(第2版)学习记录点滴
- MacOS中的设计模式
- Objective-C 总结
- C语言 枚举类型 在 Objective-C中的演变
- OC中对象的常用方法
- object-c快速入门
- 解决Failed to load module "pk-gtk-module": libpk-gtk-module.so: cannot open shared object file: No such file or directory