OC基础—内存管理之set方法内存管理
来源:互联网 发布:freebsd 安装python 编辑:程序博客网 时间:2024/05/18 03:36
------ android培训、java培训、期待与您交流! ----------
set方法内存管理
我们来看一下,最严谨的方法
#import <Foundation/Foundation.h>#import "Car.h"@interface Person : NSObject{ Car * _car; int _age;}- (void)setAge:(int)age;- (int)age;- (void)setCar:(Car *)car;- (Car *)car;@end
#import "Person.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{ // 基本数据类型不需要retain _age = age;}- (int)age{ return _age;}- (void)dealloc{ // 当人不在了,代表不用车了 // 对车做一次release [_car release]; NSLog(@"%d岁的person对象被回收!", _age); [super dealloc];}@end
首先来看看dealloc方法
dealloc方法的代码规范
1. 一定调用[super dealloc],一定放到最后面
2. 对当前对象所拥有的其它对象,做一次release
- (void)dealloc
{
[_car release]; // 当人不在了,也代表着不想用车了那么就要给车做一次release
[super dealloc];
}
再来看看set方法
- (void)setCar:(Car *)car { // 1.先判断传进来的是否为新对象 if ( car != _car) { // 2.对旧对象进行一次release [_car release]; // 3.对新对象进行一次retain _car = [car retain]; } }
这是最严谨的set方法,这样最遵循内存原则
现在我们来看一个错误写法
Student *stu = [[Student alloc] init];stu.car = [[Car alloc] init];[stu release];这代码看起来没有问题,可是这存在内存泄露问题
先看一下stu,刚创建的时候计数器为1,后面没有变化,最后release一次计数器为0,没有问题。
再来看看car呢。
stu.car = [[Car alloc] init];右边Car刚创建时计数器为1,stu.car方法计数器为2,当stu释放car的计数器-1,最后car的计数器一直为1,无法释放。
这样的代码就可以称为垃圾代码。
------ android培训、java培训、期待与您交流! ----------
0 0
- OC基础—内存管理之set方法内存管理
- OC之set方法内存管理
- OC基础—内存管理之autorelease
- OC内存管理release、autorelease和set方法内存管理
- oc的set方法内存管理
- OC set方法的内存管理
- 黑马程序员——IOS基础——OC内存管理-set方法内存管理及微博模型设计
- 黑马程序员——OC基础---内存管理(引用计数器,多对象内存管理,set方法的内存管理,模型设计,循环引用)
- OC基础-内存管理
- OC 内存管理基础
- OC基础:内存(内存管理)
- OC之【内存管理】
- set 方法内存管理
- OC 基础之----内存管理总结
- OC基础—内存管理之多对象内存管理
- 黑马程序员—IOS基础之OC—内存管理
- OC基础—内存管理之引用计数器
- OC基础-内存管理-引用计数器+set方法
- 学习笔记:matlab 基础
- 【微软2014实习生及秋令营技术类职位在线测试】题目2 : K-th string
- 明月寄相思中秋节ppt模板
- Android开发简介
- java base64编码和解码的三种方式
- OC基础—内存管理之set方法内存管理
- Unicdoe【真正的完整码表】
- 【Bug Fix】Error : Can't create table '#sql-534_185' (errno: 150)
- 简述STRUTS2 Convention零配置
- 阿里巴巴技术实习生面试,c++方向
- 根据二叉树的先序与中序序列或后续与中序序列恢复二叉树并图像化打印(c语言)
- Sort List
- Android 猜拳小游戏
- 数据一致性和并发性