OC set方法的内存管理
来源:互联网 发布:网络枪战手游 编辑:程序博客网 时间:2024/05/18 01:33
当一个对象中引用了另外一个对象, 在set方法中应当注意所引用的对象和原来所拥有的对象是否为同一对象. 以避免发生野指针错误
示例代码如下
//// Car.h// set方法内存管理//// Created by LiuWei on 15/4/16.// Copyright (c) 2015年 LiuWei. All rights reserved.//#import <Foundation/Foundation.h>@interface Car : NSObject{ int _speed;}- (void)setSpeed: (int)speed;- (int)speed;@end
//// Car.m// set方法内存管理//// Created by LiuWei on 15/4/16.// Copyright (c) 2015年 LiuWei. All rights reserved.//#import "Car.h"@implementation Car- (void)setSpeed:(int)speed{ _speed = speed;}- (int)speed{ return _speed;}- (void)dealloc{ NSLog(@"速度为%i的车子被释放", _speed); [super dealloc];}@end
//// Person.h// set方法内存管理//// Created by LiuWei on 15/4/16.// Copyright (c) 2015年 LiuWei. All rights reserved.//#import <Foundation/Foundation.h>#import "Car.h"@interface Person : NSObject{ int _age; Car *_car;}- (void)setAge: (int)age;- (int)age;- (void)setCar: (Car*)car;- (Car *)car;@end
//// Person.m// set方法内存管理//// Created by LiuWei on 15/4/16.// Copyright (c) 2015年 LiuWei. All rights reserved.//#import "Person.h"@implementation Person- (void)setAge:(int)age{ _age = age;}- (int)age{ return _age;}- (void)setCar:(Car *)car{ if(_car != car) // 判断传入的Car对象和原来所拥有的Car对象是否一样 一样则不需要进行任何处理 { [_car release]; // 和原来的Car对象不一样,则使原来引用的Car对象引用计数减1 _car = [car retain]; // 引用新的Car对象并使引用计数加1 }}- (Car *)car{ return _car;}- (void)dealloc{ NSLog(@"年龄为 %i的Person对象被释放了!", _age); [_car release]; // 在对象释放时释放所引用的资源 [super dealloc];}@end
//// main.m// set方法内存管理//// Created by LiuWei on 15/4/16.// Copyright (c) 2015年 LiuWei. All rights reserved.//#import <Foundation/Foundation.h>#import "Person.h"#import "Car.h"int main() { Car *biyadi = [[Car alloc]init]; biyadi.speed = 120; Car *BMW = [[Car alloc]init]; BMW.speed = 180; Person *xiaoMing = [[Person alloc]init]; xiaoMing.age = 35; xiaoMing.car = biyadi; NSLog(@"biyadi 引用计数: %lu", [biyadi retainCount]); xiaoMing.car = BMW; NSLog(@"biyadi 引用计数: %lu", [biyadi retainCount]); NSLog(@"BMW 引用计数: %lu", [BMW retainCount]); xiaoMing.car = BMW; NSLog(@"BMW 引用计数: %lu", [BMW retainCount]); [xiaoMing release]; [BMW release]; [biyadi release]; return 0;}
运行结果如图
0 0
- oc的set方法内存管理
- OC set方法的内存管理
- OC之set方法内存管理
- OC基础—内存管理之set方法内存管理
- OC内存管理release、autorelease和set方法内存管理
- 黑马程序员23——OC之内存管理(set方法的内存管理)
- set方法的内存管理
- 黑马程序员--oc中set方法的内存管理
- 黑马程序员---OC set方法的内存管理
- 黑马程序员——OC基础---内存管理(引用计数器,多对象内存管理,set方法的内存管理,模型设计,循环引用)
- OC 简单的内存管理方法
- IOS开发---OC语言-⑳内存管理:set方法内存管理
- set 方法内存管理
- object-c set方法的内存管理
- 9.set方法的内存管理
- 11.内存管理的set方法
- 《ios—set方法的内存管理》
- Object-c-----set方法的内存管理
- Linux技巧记录
- 线性查找问题
- Spring Json View之异常处理和错误处理
- VIM配置文件
- qtp自带常用函数
- OC set方法的内存管理
- 10 招让你成为杰出的Java程序员
- Android 选择卡个人总结
- 第七周 项目一:图形用户界面应用程序开发初体验
- JVM调优总结(一)-- 一些概念
- 《让你提升命令行效率的 Bash 快捷键 [完整版]》
- 普元软件推动企业应用架构转型互联网
- JVM调优总结(二)-一些概念
- C#特性之通俗演义