iOS内存管理浅析

一、引用计数 app

        iOS实例化一个新对象最经常使用的方式:NSObject *obj = [[NSObject alloc] init];全部的OC对象都有一个4个字节的引用计数器,最初对象的引用计数为1.若是要引用这个对象,能够对这个对象发送retain消息,引用计数会+1,引用完的话要用release使其引用计数-1.若是对象的引用计数为0,对象所占有的那块内存将被释放。对于局部变量在方法结束的时候就要释放掉内存,否则会引发内存泄露 spa

二、引用计数与C、C++的内存管理相比的优点 指针

        C,C++中的内存管理int *p1建立了一块内存空间,p2, p3要使用这块内存空间,就要指向这块内存空间,若是任何一个指针释放掉这块内存空间,都会让这块内存空间消失,另外两个指针就会成为野指针,若是再使用这两个指针中的一个,都会出现段错误,引发崩溃。而引用计数,只要不为0,就不会出现提早释放。 对象

三、开发文档中对内存管理的表述 内存

        开发文档中有个对内存管理有个通用的表述:The basic role to apply is EveryThing that increases the reference counter with alloc, copy ,mutableCopy or retain is in charge of the corresponding [auto]release.适用于内存管理的通用规则是,只要使用alloc,copy, mutableCopy或retain使对象的引用计数+1,就有责任调用autorelease或release使引用计数-1. 开发

四、点语法中的内存管理, 文档

@property (retain)NSString *str; get

@synthesize str; it

只要调用self.str = @“xxx”,str的引用计数就+1; 内存管理

上面的两句话至关于经典语法:getter和setter。对属性内存释放通常用self.str = nil.不要直接发送release给属性,即不要这样写[self.str release];使用属性的时候不管用什么方法建立的属性,只要有retain或copy,都要把nil赋值给属性。

相关文章
相关标签/搜索