《ios—set方法的内存管理》
2015-12-19 17:18
337 查看
概要:在ios笔试的题目中,关于内存管理是出题率很高的,然后在内存管理中,set方法的内存管理是最典型的。下面是避免set方法内存管理的定义格式,让无论是在调用对象的过程中不会造成野指针和内存泄露。
#import <Foundation/Foundation.h> #import "Car.h" @interface Person : NSObject { Car * _car; NSString * _name; } - (void)setName:(NSString *)name; - (NSString *)name; - (void)setCar:(Car *)car; - (Car *)car; - (void)drive; @end
#import "Person.h" //配对原则:new alloc retain 对应一个release,autorelease @implementation Person - (void)setName:(NSString *)name { if (_name != name) { [_name release]; _name = [name retain]; } } - (NSString *)name { return _name; } // 据说面试笔试,出题率非常高 - (void)setCar:(Car *)car { if (_car != car) // 如果新值和旧值不是同一个对象的时候 { //relese旧值 retainCount-1 [_car release]; // 当如果是第一次调用这个方法会调用[nil release]; 反之release上次调用该方法的旧值 //retain新值 retainCount+1 _car = [car retain]; } } - (Car *)car { return _car; } - (void)drive { [_car run]; } - (void)dealloc { //目的是要保证在p对象存在的时候,所以在setCar方法中 _car = [car retain]使得car的retain+1,这样的其他类中调用释放的时候始终保证在p对象释放之前car对象一定存在,当car对象所在对象p销毁的时候会自动销毁car的dealloc方法,然后release就自动销毁car。 //对象p被销毁的时候, [_car release]; [_name release]; [super dealloc]; NSLog(@"Person 被销毁了"); } @end
相关文章推荐
- iOS 中子类重写父类方法的时候应该什么时候写在 super 之前 什么时候写在 super 之后
- 切换VC的时候内存溢出崩溃
- iOS保存系统相册中的照片到应用沙盒中出现的问题--图片旋转90度,使用CGImageRelease造成应用崩溃
- github优秀开源项目大全-iOS
- iOS中的用户交互userInteractionEnabled
- iOS视图,动画渲染机制深究
- 《ios—单个对象的内存管理》
- 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开发--字典转模型