黑马程序员---Objective-C 内存管理 - set方法的内存管理

来源:互联网 发布:天津平山道淘宝城 编辑:程序博客网 时间:2024/04/28 14:20

*内存管理只针对OC对象,基本类型数据int 、doublechar不需要进行内存管理


1.方法的基本使用

 1> retain :计数器+1,会返回对象本身

 2> release :计数器-1,没有返回值

 3> retainCount :获取当前的计数器

 4> dealloc

  * 当一个对象要被回收的时候,就会调用

  * 一定要调用[super dealloc],这句调用要放在最后面

 

 2.概念

 1> 僵尸对象 :所占用内存已经被回收的对象,僵尸对象不能再使用

 2> 野指针 :指向僵尸对象(不可用内存)的指针,给野指针发送消息会报错(EXC_BAD_ACCESS

 3> 空指针 :没有指向任何东西的指针(存储的东西是nilNULL0),给空指针发送消息不会报错

- (void)dealloc{    NSLog(@"Person对象被回收");       // super的dealloc一定要调用,而且放在最后面    [super dealloc];}


3.set方法的内存管理

当时用alloc或者new 创建一个对象,就必调用release 或autorelease

1.你想使用(占用)某个对象,就应该让对象的计数器+1(让对象做一次retain操作)

 2.你不想再使用(占用)某个对象,就应该让对象的计数器-1(让对象做一次release

3.retain,谁release

4.alloc,谁release

当一个人拥有一个 书的对象的是后,需要在实现中如下操作

#import "Person.h"@implementation Person- (void)setBook:(Book *)book{if(book != _book){[_book  release];_book = [book retain];}}- (void)dealloc{[_book release];NSLog(@"Person对象被回收");[super dealloc];}@end


要注意的是,人有几个OC对象的成员变量,最后都要relesae

- (void)dealloc{    [_name release];    [_car release];    [_dog release];    [super dealloc];}


0 0