您的位置:首页 > 其它

手动内存管理-对象的引用计数

2015-01-13 21:52 218 查看
//

// main.m

// OC手动内存管理-对象的引用计数

//

// Created by Goddog on 15/1/13.

// Copyright (c) 2015年 Goddog. All rights reserved.

//

/*

1.有效的内存管理两个方面:(1)内存分配:当程序创建对象时要为对象分配内存,采用合理的设计尽量减少对象的创建,并减少对

创建过程中内存开销。

(2)内存回收:当程序不再需要对象时,系统必须及时回收这些对象所占用的内存,以便程序可以再次

使用这些内存。

2.在Xcode 4.2之后,有了自动引用计数(ARC)机制,编译时引用了-fobjc-arc选项

3.OC可用的内存回收机制有:(1)手动引用计数和自动释放池。(2)自动引用计数(ARC)。(3)自动垃圾回收(IOS暂不支持)。

4.OC对引用计数的计数来跟踪对象的状态,每个对象都有一个与之关联多整数,这个整数称之为引用计数器。系统在销毁之前会自动

调用该对象的dealloc方法来执行回收操作,当一个对象的引用计数为0时,系统会销毁该对象,如果有一个指针指向这个被销毁

的对象,这个指针就被称之为悬空指针。

5.手动计数中,改变对象的引用计数的方式:(1)当程序调用方法名以alloc、new、copy、mutabaleCopy开头的方法来创建对象

时,该对象的引用计数加1。(要以驼峰标准如newBook才可)

(2)程序调用对象的retain方法时,该对象的引用计数加1。

(3)程序调用对象的release方法时,该对象的引用计数减1。

6.OC有关引用计数的方法:(1)-retain:
将该对象的引用计数器加1。

(2)-release: 将该对象的引用计数器减1。

(3)-autorelease:不改变对象的引用计数器的值,只是将该对象添加到自懂释放池中。

(4)-retainCount:
返回该对象的引用计数值。

7.OC开始调用init方法,最后完全释放则调用dealloc方法

*/
//
//  Man.h
//  OC手动内存管理-对象的引用计数
//
//  Created by Goddog on 15/1/13.
//  Copyright (c) 2015年 Goddog. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Man : NSObject

@end
//
//  Man.m
//  OC手动内存管理-对象的引用计数
//
//  Created by Goddog on 15/1/13.
//  Copyright (c) 2015年 Goddog. All rights reserved.
//

#import "Man.h"

@implementation Man
//重写该方法作为测试
-(id) init
{
if (self == [super init]) {
//要关闭ARC机制
NSLog(@"init方法中,引用计数为:%ld",self.retainCount);
}
return self;
}

-(void) dealloc
{
NSLog(@"系统销毁");
//要关闭ARC机制
[super dealloc];
}
@end


#import <Foundation/Foundation.h>
#import "Man.h"

int main(int argc, const char * argv[]) {
@autoreleasepool {

//调用new方法创建对象,该对象引用计数为0
Man* man = [Man new];
NSLog(@"%ld",man.retainCount);
[man retain];  //引用计数加1,此时retainCount为2
NSLog(@"%ld",man.retainCount);
[man retain];  //引用计数加1,此时retainCount为3
NSLog(@"%ld",man.retainCount);
[man release];   //引用计数减1,此时retainCount为2

}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: