手动内存管理-对象的引用计数
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方法
*/
// 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; }
相关文章推荐
- 引用计数的cocos2dx对象内存管理和直接new/delete box2d对象内存管理冲突的解决方法
- 引用计数的cocos2dx对象内存管理和直接new/delete box2d对象内存管理冲突的解决方法
- IOS内存管理--手动引用计数实现
- iOS内存管理系列之一:对象所有权与引用计数
- 手动释放(dispose)对象空间和跟踪引用计数
- OC-023.OC在手动内存管理的引用计数
- iPhone内存管理面面观 对象所有权与引用计数
- iOS内存管理系列之一:对象所有权与引用计数
- iOS内存管理系列之一:对象所有权与引用计数
- 【深入Cocos2d-x】探索Cocos2d-x中的内存管理-引用计数和自动释放池
- 线程、进程内核对象引用计数问题
- iOS内存管理之:引用计数、ARC、自动释放池autoreleasepool和便捷方法之间的关系
- 从JVM内存管理的角度谈谈静态方法和静态属性 和 java对象引用与JVM自动内存管理
- objective-C 的内存管理之-引用计数
- 引用计数自动管理对象的生存周期
- 线程核心对象的引用计数
- iOS中引用计数内存管理机制分析
- 七十四、基础框架(三十二)内存管理-引用计数
- ObjC(Objective-C)的内存管理之-引用计数
- 对象引用 计数 原理