黑马程序员——OC语言学习——OC手动内存管理

本文详细介绍了Objective-C中的内存管理,包括内存的五种类型、对象的释放机制、引用计数器的使用、内存管理规范代码如alloc与release的配合、set方法的处理、dealloc方法的注意事项,以及多个对象间的内存管理问题,特别是非相互引用和循环引用的处理。同时,还涉及了@property参数和autorelease的概念。
摘要由CSDN通过智能技术生成

-----------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -----------


一、 内存管理

OC中内存有五种

局部变量是存储在,栈内存中

动态变量存储在,堆内存中,对象就是存储在堆内存中

局部变量在运行完后,系统会自动释放,而对象不会自动释放,

设想一下,植物大战僵尸中的子弹对象,如果不及时回收,释放内存,子弹会占用非常多的内存空间

所以对象需要我们,释放其所占空间,以保障软件流畅运行。


二、 对象的释放机制

OC中我们通过引用计数器来控制对象什么时候被销毁,我们规定:当对象引用计数器值为0时,对象被回收。

当我们在创建一个对象时,他的引用计数器被赋值为1,每被赋值一次,计数器加1,当不在引用这个对象时,对象计数器减1,对象被销毁时,再减1。

我们通过retain 和 release 来实现计数器的加1,减1.

OC内存管理口诀:谁污染谁治理,alloc一下必须release一下。


Xcode6.2关闭内存管理方法:将YES改成NO,这样我们才能实现手动管理内存。ARC是OC中自动管理内存的机制,非常棒!省去我们很多时间写内存管理的重复代码。

下一章会讲到。


1、 引用计数器的基本使用

 1.方法的基本使用

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

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

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

 4> dealloc

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

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

#import <Foundation/Foundation.h>
@interface Person : NSObject
@property int age;
@end
@implementation Person

// 当一个Person对象被回收的时候,就会自动调用这个方法
- (void)dealloc
{
    NSLog(@"Person对象被回收");
    
    // super的dealloc一定要调用,而且放在最后面
    [super dealloc];
}
@end

int main()
{
    Person *p = [[Person alloc] init]; //对象被创建引用计数器加1
    int a = [p retainCount]; //查看一下引用计数器的值
    NSLog(@"%d", a);
    //现在不用这个对象了将这个对象回收,掉用release。口诀,alloc一下,release一下。
    [p release]; // 引用计数器为0,对象被回收,这时的指针就是野指针,它指向的对象就是僵尸对象
    
    // 野指针继续调用对象方法,就会出现一些错误
    [p retainCount];
    
    // 空指针:指向没有任何对象的指针
    p = nil;
    
    return 0;
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值