您的位置:首页 > 其它

OC内存管理重点

2015-10-14 21:45 176 查看
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 ->回车
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: