OC对象的内存管理

一. 原理

     对于任何继承了NSObject的对象,都有一个与之关联的整形变量,称为引用计数器;只有计数器的值为0的时候,OC就回收该对象,否则永不回收。

     1. 创建对象时,如使用alloc ,new , copy,引用计数器的值为1

     2. 当使用release方法释放时,计数器的值减1

     3. 当使用retain方法时,计数器的值加1

     4. 当对象被回收时候,自动调用对象的dealloc方法,

     5. 使用retainCount方法来获取引用计数器的值

二. 防止内存泄露标准示例写法:

@class Book;
@interface Student : NSObject
@property Book *book;
@end
#include "Book.h"
@implementation Student
//该写法能完美防止内存泄露
- (void)setBook:(Book *)book{
    if(_book!=book){
        [_book release];
        _book = [book retain];
    }
}
- (Book *)book{
    return _book;
}
- (void)dealloc{
    [_book release];//释放_book对象
    [super dealloc];
}
@end

以上对于内存泄露的处理,可直接用@property参数retain关键字简写为:

@class Book;
@interface Student : NSObject
@property (retain) Book *book;//OC会在set方法中作以上检查
@end





  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值