IOS开发---OC语言-⑳内存管理:set方法内存管理
来源:互联网 发布:可意影音 mac 破解版 编辑:程序博客网 时间:2024/05/18 03:06
例一:
/*1.你想使用(占用)某个对象,就应该让对象的计数器+1(让对象做一次retain操作)2.你不想再使用(占用)某个对象,就应该让对象的计数器-1(让对象做一次release)3.谁retain,谁release4.谁alloc,谁release*/
上面的方法不严谨
例二:
文件名:Person.h
*/
#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文件名:Person.m
#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
{ // 基本数据类型不需要管理内存
_age = age;
}
- (int)age
{
return _age;
}
- (void)dealloc
{
// 当人不在了,代表不用车了
// 对车做一次release操作
[_car release];
NSLog(@"%d岁的Person对象被回收了", _age);
[super dealloc];
}
@end
文件名:Car.h
#import <Foundation/Foundation.h>
@interface Car : NSObject
{
int _speed;
}
- (void)setSpeed:(int)speed;
- (int)speed;
@end
文件名:Car.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
总结:
/*
内存管理代码规范:
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];
}
*/
0 0
- IOS开发---OC语言-⑳内存管理:set方法内存管理
- OC基础—内存管理之set方法内存管理
- OC内存管理release、autorelease和set方法内存管理
- oc的set方法内存管理
- OC set方法的内存管理
- OC之set方法内存管理
- IOS开发---OC语言-㉘内存管理ARC循环调用
- IOS开发---OC语言-㉙内存管理:block的使用
- iOS开发语言之OC 初级内存管理
- OC语言--内存管理
- OC语言--内存管理
- OC语言内存管理
- OC语言 内存管理
- IOS OC 内存管理
- ios开发-OC内存管理的学习
- iOS开发-Day20-OC 手动内存管理
- iOS开发之OC内存管理
- IOS开发笔记20-OC内存管理
- Unity3D Shader官方教程翻译(八)----Shader语法:Pass的纹理处理 .
- iOS画虚线
- NGUI系列教程 第四部
- MySQL 里面的Where 和Having和Count 和distinct和Group By对比
- boost asio 性能与线程安全性
- IOS开发---OC语言-⑳内存管理:set方法内存管理
- java 将json字串转成复杂对象
- 显示scrollview时对滚动条进行任意位置的定位
- ORA-29861: 域索引标记为 LOADING/FAILED/UNUSABLE
- Unity3D Shader官方教程翻译(九)----Shader语法:Pass的雾化处理
- Android的系统架构
- How Linux Initializes Memory - TCC8900
- 数据类型转换
- 后缀数组入门题——2323后缀排序