首页 > 代码库 > 内存管理
内存管理
/* 1.方法的基本使用 1> retain :计数器+1,会返回对象本身 2> release :计数器-1,没有返回值 3> retainCount :获取当前的计数器 4> dealloc * 当一个对象要被回收的时候,就会调用 * 一定要调用[super dealloc],这句调用要放在最后面 2.概念 1> 僵尸对象 :所占用内存已经被回收的对象,僵尸对象不能再使用 2> 野指针 :指向僵尸对象(不可用内存)的指针,给野指针发送消息会报错(EXC_BAD_ACCESS) 3> 空指针 :没有指向任何东西的指针(存储的东西是nil、NULL、0),给空指针发送消息不会报错 */
// 当一个Person对象被回收的时候,就会自动调用这个方法- (void)dealloc{ NSLog(@"Person对象被回收"); // super的dealloc一定要调用,而且放在最后面 [super dealloc];}
// -[Person setAge:]: message sent to deallocated instance 0x100109a10 // 给已经释放的对象发送了一条-setAge:消息: p.age = 10;
/* 1.你想使用(占用)某个对象,就应该让对象的计数器+1(让对象做一次retain操作) 2.你不想再使用(占用)某个对象,就应该让对象的计数器-1(让对象做一次release) 3.谁retain,谁release 4.谁alloc,谁release */
/* 内存管理代码规范: 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]; } */
/* _speed :直接访问成员变量 self->_speed :直接访问成员变量 self.speed : get方法 [self speed] : get方法 */
Student *stu = [[Student alloc] init]; // 这行内存有内存泄露 stu.car = [[Car alloc] init]; [stu release]; // 这行内存有内存泄露 [[Car alloc] init].speed = 100;
// retain : 生成的set方法里面,release旧值,retain新值@property (retain) Book *book;@property (retain) NSString *name;
内存管理
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。