引用计数器
Cocoa采用了一种叫做引用计数的技术,有时也叫做保留技术。每个对象都有一个与之相关联的整数,被称作它的引用计数器或保留计数器。当需要访问一个对象时,该代码就将对象的保留计数器值加1,表示“我要访问该对象”。当结束对象访问时,将对象的保留计数器减1,表示它不再访问该对象。当保留计数器的值为0时,表示不再有代码访问该对象,就会被销毁,其占用的内存被系统回收以便重用。
当使用alloc、new方法或者通过copy消息(接收到消息的对象会创建一个自身的副本)创建一个对象时,对象的保留计数器值被设置为1。要增加对象的保留计数器的值,可以给对象发送一条retain消息。要减少的话,给对象发送一条release消息。
#import "RetainTest.h"
@implementation RetainTest
- (id)init
{
if (self = [super init]) {
NSlog (@"init : Retain count of %lu.", [self retainCount]);
}
return self;
}
-(void)dealloc
{
NSLog (@"dealloc called. Bye Bye");
[super dealloc];
}
@end
#import <Foundation/Foundation.h>
#import "RetainTest.h"
int main()
{
RetainTest *p = [[RetainTest alloc] init];
//count :1
[p retain];//count : 2
NSLog(@"%lu",[p retainCount]);
[p retain];//count : 3
NSLog(@"%lu",[p retainCount]);
[p release];//count : 2
NSLog(@"%lu",[p retainCount]);
[p release];//count : 1
NSLog(@"%lu",[p retainCount]);
[p retain];//count : 2
NSLog(@"%lu",[p retainCount]);
[p release];//count : 1
NSLog(@"%lu",[p retainCount]);
[p release];//count :0,dealloc it
p = nil;
return 0;
}野指针和空指针
野指针:指向僵尸对象(不可用内存)的指针
当release对象后,其retaincount计数如果为0,建议nil一次,例如:
autorelease
内存管理的基本原则:
归根结底要记住一条黄金法则:谁创建谁释放,谁retain谁释放。
如果使用alloc(或者copy、new)方法创建一个对象,或者使用retain保留一个对象,那么,都要自己释放对象。
在大多数情况下,申请内存的语句数量和释放内存的语句数量应该相等。
尽量少使用内存,用完后记得立即释放。
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------详细请查看:http://edu.youkuaiyun.com

被折叠的 条评论
为什么被折叠?



