《ios—单个对象的内存管理》
2015-12-19 16:26
375 查看
内存管理原则(配对原则):
只要出现了 new,alloc,retain,就一定配对出现一个release,autorelease。
保证代码中allo和release成对出现是保证内存管理的关键。
僵尸对象:被系统回收的对象我们称之为僵尸对象。
手动内存管理研究问题方法:
1、
野指针操作:指针对象被释放了之后(retainCount=0之后系统自动释放),再使用这个对象指针会造成的崩溃效果。
解决野指针的方法:如果确定当前作用于中的对象已经不会再被使用了,为了防止野指针操作,通常我们会把不在使用的指针变量赋值为nil,之后无论访问什么方法和属性都不会造成野指针,因为调用nil的任何属性和方法都是没效果的。
只要出现了 new,alloc,retain,就一定配对出现一个release,autorelease。
保证代码中allo和release成对出现是保证内存管理的关键。
僵尸对象:被系统回收的对象我们称之为僵尸对象。
手动内存管理研究问题方法:
1、
野指针操作:指针对象被释放了之后(retainCount=0之后系统自动释放),再使用这个对象指针会造成的崩溃效果。
#import <Foundation/Foundation.h> @interface Person : NSObject @property int age; - (void)run; @end #import "Person.h" @implementation Person - (void)dealloc { [super dealloc]; NSLog(@"Person 被销毁了"); } - (NSString *)description { return [NSString stringWithFormat:@"age = %d",_age]; } - (void)run { NSLog(@"人跑起来了"); } @end
Person * p = [[Person alloc] init]; // retainCount = 1 p.age = 20; NSLog(@"%@",p); [p release]; // retainCount = 0 p将被系统自动释放 NSLog[@"%@",p] // 野指针
解决野指针的方法:如果确定当前作用于中的对象已经不会再被使用了,为了防止野指针操作,通常我们会把不在使用的指针变量赋值为nil,之后无论访问什么方法和属性都不会造成野指针,因为调用nil的任何属性和方法都是没效果的。
Person * p = [[Person alloc] init]; p.age = 20; NSLog(@"%@",p); [p release]; //如果你确定当前作用于中的对象已经不会再被使用了,为了防止野指针操作,通常我们会把不在使用的指针变量赋值为nil p = nil; p.age = 30;//[nil setAge:30]; [p run]; //[nil run];
2、 **内存泄漏**:指的就是,不再被使用的对象,一直在内存中没有被销毁.会造成程序内存在运行过程中内存占用很大,就会造成内存警告,最后系统自动闪退。
//内存泄漏第一种情况 //1 Person * p = [[Person alloc] init]; p.age = 20; NSLog(@"%@",p); //2 [p retain]; //3 [p retain]; //2 [p release]; //内存泄漏第一种情况 Person * p = [[Person alloc] init]; p.age = 20; [p run]; p = nil; [p release];//[nil release]; Person * p = [[Person alloc] init]; p.age = 20; Person * p1 = p; // 两个指针指向同一个对象的内存空间 [p1 release]; // 内存被释放 不能在调用 [p.age = 10]; // 野指针 [p1.age = 10] // 野指针
相关文章推荐
- iOS懒加载有坑,使用懒加载时应该注意避免
- 【iOS开发】 NSTimer的使用详解
- iOS MD5加密和SHA-1加密
- ios 项目中 用到的动画
- iOS 学习资料整理
- iOS,17个提升iOS开发效率的必用工具
- iOS---SDWebImage的使用
- iOS 优秀学习资源整理 --这两个资源够你看的了
- IOS_归档与解档
- (NO.00005)iOS实现炸弹人游戏(一):游戏的整体规划设计
- (NO.00005)iOS实现炸弹人游戏(一):游戏的整体规划设计
- (NO.00005)iOS实现炸弹人游戏(一):游戏的整体规划设计
- ios开发--字典转模型
- iOS经典开源库
- ios facebook 开源动画 pop 常用动画
- iOS Json解析中特殊字符串('\' '\r' '\n' ' ' 等)处理
- iOS中的ARC和MRC环境下的单例设计模式的分析
- iOS 文件管理
- iOS剩余存储空间
- iOS开发,初探离屏渲染