iOS中内存管理基本概念

来源:互联网 发布:下载淘宝软件并安装 编辑:程序博客网 时间:2024/05/16 10:28

我们都知道,在使用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];    }
0 0
原创粉丝点击