您的位置:首页 > 移动开发 > IOS开发

iOS中内存管理基本概念

2016-01-23 19:54 253 查看
我们都知道,在使用objective-c进行iOS应用开发中,我们创建一个对象主要分为三个步骤:

分配内存空间,存储对象(alloc)

初始化成员变量(init)

返回对象的指针地址

MRC

在使用MRC进行程序开发中,每当我们创建一个对象的时候,系统都会为我们一个与内存管理相关的属性:retainCount(引用计数器),该属性用来记录当前对象被引用的次数,当一个对象刚刚创建出来的时候,retainCount的初始值为1,这个计数器,是系统用来判断是否回收对象的唯一依据,当我们的引用计数retainCount = 0的时候,系统会毫不犹豫回收当前对象.

改变retainCount的值可以对对象进行retain操作,使得对象的引用计数器值+1(retainCount + 1 ,返回self),执行release操作,可以让引用计数器的值-1(retainCount - 1);

当引用计数retainCount = 0的 对象就被销毁了

当一个对象要被销毁的时候,系统会自动调用dealloc函数,通知对象将要被销毁

内存管理黄金法则:

如果一个对象使用了alloc,[mutable] copy,retain,new,那么你必须使用相应的release或autonrelease

例如:在我的代码中有一个person类,简单对retain和release进行演示

#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
// 创建对象,对象当前的retainCount = 1
Person * p = [[Person alloc] init];
NSLog(@"%lu",p.retainCount);

// 通过的p对象执行retain操作,retainCount+1,当前retainCount = 2
[p retain];
NSLog(@"%lu",p.retainCount);
// 对p对象执行release操作,retainCount-1,当前retainCount = 1
[p release];
NSLog(@"%lu",p.retainCount);
//执行release操作,retainCount = 0 ,调用person的dealloc方法
[p release];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息