IOS开发---OC语言-⑳内存管理:set方法内存管理

来源:互联网 发布:可意影音 mac 破解版 编辑:程序博客网 时间:2024/05/18 03:06

例一:

/*
 1.你想使用(占用)某个对象,就应该让对象的计数器+1(让对象做一次retain操作)
 2.你不想再使用(占用)某个对象,就应该让对象的计数器-1(让对象做一次release)
 
 3.谁retain,谁release
 
 4.谁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
原创粉丝点击