OC内存管理重点
2015-10-14 21:45
211 查看
1.OC内存管理中@class用法
(1)@property (nonatomic,retain) 类名 *对象名
如果两个类A,B相互引用,在头文件中用@class关键字来声明类A和B
如果在A类实现文件.m中要包含B类的头文件.h,需要#import “B.h”
如果A类要引用B类,在A类的头文件中不能#import “B.h”(原因是这样会导入B类的所有源文件,影响编译效率)
在A,B类循环引用过程中,不能将两个类都声明为@property (nonatomic,retain) A *a 这种形式,应该设置为A类为
@property (nonatomic,retain) A *a,而B类设置为@property (nonatomic,assign) B*b
A类设置为retain ,B类设置为assign时,在A类的实现方法中,不要执行release操作来回收B类对象
//A类实现方法
# import “A.h”
# import “B.h”
@implementation A
- (void)dealloc
{
// [_b release];这里不需要回收B类的成员变量
[super dealloc];
}
@end
2.autorelease 和release 区别
A *a = [[A alloc]init];
[a release];
a.成员变量=赋值;
在OC中,如果用类创建对象时,进行release后,不能直接对对象调用set方法,否则会产生野指针错误,通过autorelease将代码写在自动释放池(@autoreleasepool)中,可以不写release释放对象,此时对象是在自动释放池销毁时,对对象进行release操作。@autoreleasepool可以嵌套,在内存中以栈形式存储。
如果使用@autoreleasepool释放对象,不用考虑对象在何时释放,避免产生野指针错误,但是不适用于占用较大内存的对象,不能确定对象在何时被销毁!!!此时必须用release销毁对象。
3.ARC机制:是一种编译器特性
_week A *a 声明的指针a为弱指针,不能用弱指针创建对象,当对象没有强指针指向时,弱指针会自动销毁,此时弱指针为null型指针
ARC机制中,strong,week都适用于OC对象类型,而assign适用于非OC对象类型(基本数据类型int,long....)
4.project中ARC兼容问题解决办法?
(1)将非ARC的project转为ARC:
edit>-refactor>-convert to object -C ARC
(2)将Project中files改为非ARC机制方法:
project>-Build phases>-双击项目文件>-输入 -fno-objc-arc/-f-objc-arc ->回车
(1)@property (nonatomic,retain) 类名 *对象名
如果两个类A,B相互引用,在头文件中用@class关键字来声明类A和B
如果在A类实现文件.m中要包含B类的头文件.h,需要#import “B.h”
如果A类要引用B类,在A类的头文件中不能#import “B.h”(原因是这样会导入B类的所有源文件,影响编译效率)
在A,B类循环引用过程中,不能将两个类都声明为@property (nonatomic,retain) A *a 这种形式,应该设置为A类为
@property (nonatomic,retain) A *a,而B类设置为@property (nonatomic,assign) B*b
A类设置为retain ,B类设置为assign时,在A类的实现方法中,不要执行release操作来回收B类对象
//A类实现方法
# import “A.h”
# import “B.h”
@implementation A
- (void)dealloc
{
// [_b release];这里不需要回收B类的成员变量
[super dealloc];
}
@end
2.autorelease 和release 区别
A *a = [[A alloc]init];
[a release];
a.成员变量=赋值;
在OC中,如果用类创建对象时,进行release后,不能直接对对象调用set方法,否则会产生野指针错误,通过autorelease将代码写在自动释放池(@autoreleasepool)中,可以不写release释放对象,此时对象是在自动释放池销毁时,对对象进行release操作。@autoreleasepool可以嵌套,在内存中以栈形式存储。
如果使用@autoreleasepool释放对象,不用考虑对象在何时释放,避免产生野指针错误,但是不适用于占用较大内存的对象,不能确定对象在何时被销毁!!!此时必须用release销毁对象。
3.ARC机制:是一种编译器特性
_week A *a 声明的指针a为弱指针,不能用弱指针创建对象,当对象没有强指针指向时,弱指针会自动销毁,此时弱指针为null型指针
ARC机制中,strong,week都适用于OC对象类型,而assign适用于非OC对象类型(基本数据类型int,long....)
4.project中ARC兼容问题解决办法?
(1)将非ARC的project转为ARC:
edit>-refactor>-convert to object -C ARC
(2)将Project中files改为非ARC机制方法:
project>-Build phases>-双击项目文件>-输入 -fno-objc-arc/-f-objc-arc ->回车
相关文章推荐
- java 预处理
- LM算法
- 用C编程 预测比赛结果/通过口供判断真凶
- 请勿滥用unlogged table & hash index
- linux基础整理4
- LevelDB Version
- 最大化最小值 Aggressive cows
- 笔试题——静态变量和实例变量的区别
- Lync Server 2010标准版前端服务器迁移之一:新建中央站点(中)
- 利用php-java-bridge包实现PHP调用JAVA类
- 请勿滥用 2PC, 忘记提交prepared transaction对PostgreSQL造成的危害.
- AutoCloseable的用法
- JAVA for循环语句的循环变量类型问题
- 共勉浮生
- Android的事件处理2
- Thinkphp——(后台栏目列表)栏目及子栏目的创建及显示实例操作
- POJ 1230 Pass-Muraille 贪心
- Netfilter框架通过hook捕获数据包
- linux shell命令快捷获得系统帮助(一)[man-pages定义规范]
- 编写一个猜数字游戏