Objective-C内存管理(三)set方法内存管理
2015-07-13 22:52
281 查看
说明:以下所有都是在MRC环境下
创建Car类
Car.h文件
创建Person类
Person.h文件
Person.m文件
main.m文件
setter方法内存管理总结:
创建Car类
Car.h文件
@interface Car : NSObject { int _speed; } - (void)setSpeed:(int)speed; - (int)speed; @endCar.m文件
#import "Car.h" @implementation Car - (void)setSpeed:(int)speed { _speed = speed; } - (int)speed { return _speed; } - (void)dealloc { /* _speed :直接访问成员变量 self->_speed :直接访问成员变量 self.speed : get方法 [self speed] : get方法 */ NSLog(@"速度为%d的Car对象被回收了", _speed); [super dealloc]; } @end
创建Person类
Person.h文件
#import <Foundation/Foundation.h> @class Car; @interface Person : NSObject { Car *_car; int _age; } - (void)setAge:(int)age; - (int)age; - (void)setCar:(Car *)car; - (Car *)car; @end
Person.m文件
#import "Person.h" #import "Car.h" @implementation Person - (void)setCar:(Car *)car { if (car != _car) { // 对当前正在使用的车(旧车)做一次release [_car release]; // 对新车做一次retain操作 _car = [car retain]; } } - (Car *)car { return _car; } - (void)setAge:(int)age { // 基本数据类型不需要管理内存 _age = age; } - (int)age { return _age; } - (void)dealloc { // 当人不在了,代表不用车了 // 对车做一次release操作 [_car release]; NSLog(@"%d岁的Person对象被回收了", _age); [super dealloc]; } @end
main.m文件
#import <Foundation/Foundation.h> #import "Car.h" #import "Person.h" int main() { // p-1 Person *p = [[Person alloc] init]; p.age = 20; // c1-1 Car *c1 = [[Car alloc] init]; c1.speed = 250; // p想拥有c1 // c1-2 p.car = c1; // [p setCar:c1]; // c2-1 Car *c2 = [[Car alloc] init]; c2.speed = 300; // p将车换成了c2 // c1-1 // c2-2 p.car = c2; // c2-1 [c2 release]; // c1-0 [c1 release]; // p-0 c2-0 [p release]; return 0; }
setter方法内存管理总结:
** 1.只要调用了alloc,必须有release(autorelease) 对象不是通过alloc产生的,就不需要release ** 2.set方法的代码规范 1> 基本数据类型:直接复制 - (void)setAge:(int)age { _age = age; } 2> OC对象类型 - (void)setCar:(Car *)car { // 1.先判断是不是新传进来对象 if ( car != _car ) { // 2.对旧对象做一次release [_car release]; // 3.对新对象做一次retain _car = [car retain]; } } ** 3.dealloc方法的代码规范 1> 一定要[super dealloc],而且放到最后面 2> 对self(当前)所拥有的其他对象做一次release - (void)dealloc { [_car release]; [super dealloc]; }
相关文章推荐
- 黑马程序员——Java包、内部类、Object类
- 【C++】深度探索C++对象模型读书笔记--关于对象(Object Lessons)
- 黑马程序员——基础学习(八)API中Object、Scanner以及String的用法概述
- 使用ObjectAnimator开发打开、关闭书本动画
- 黑马程序员--Objective-C——面向对象
- Objective-C - 改变NSMutableArray的特定元素
- objective-c 消息是什么
- JSONObject、JSONArray.fromObject 不执行不报错
- OC基础回顾(一)Objective-C是对C语言的扩展
- 黑马程序员--Objective-C——OC单例的实现
- 黑马程序员--Objective-C——Foundation框架二
- 黑马程序员--Objective-C——Foundation框架一
- 黑马程序员--Objective-C——Block与@protocol
- 黑马程序员--Objective-C——ARC
- 黑马程序员--Objective-C——内存管理二
- 黑马程序员--Objective-C——内存管理一
- IOS开发系列—Objective-C之内存管理
- IOS开发系列--Objective-C之协议、代码块、分类
- IOS开发系列--Objective-C之KVC、KVO
- IOS开发系列—Objective-C之Foundation框架