黑马程序员———OC学习第五天(内存管理)

本文深入讲解iOS内存管理机制,包括内存管理的概念、对象的销毁过程、引用计数器的操作方式及 autorelease 的使用方法。此外还介绍了 set 方法的内存管理策略以及 @property 参数的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

------- Android培训Java培训IOS培训.NET培训 期待与您交流! ----------

内存管理

1、什么是内存管理

  • 移动设备的内存极其有限,每个app所能占用的内存是有限制的
  • 当app所占用的内存较多时,系统会发出内存警告,这时得回收一些不需要在使用的内存空间。比如回收一些不需要使用的对象、变量等
  • 管理范围:任何继承了NSObject的对象,对基本数据类型不需要管理内存

2、对象的销毁

  • 当一个对象的引用计数器为0时,它将会被销毁,其所占用的内存被释放
  • 当一个对象被销毁时,系统会自动向对象发送一条dealloc消息
  • 一般会重写dealloc方法,在这里释放相关资源,dealloc就像是对象的遗言
  • 一旦重写了dealloc方法,就必须调用[super dealloc]方法,并且放在最后
  • 不要直接调用dealloc方法
  • 一旦对象被回收,它所占用的内存就不再使用,坚持使用会导致程序崩溃(野指针错误EXC_BAD_ACCESS)

3、计数器的基本操作

  • retain:计数器+1
  • release: 计数器-1
  • retainCount:获取当前计数器个数

eg:

// ......

 Person *p = [Person alloc] init]
 // 获取当前计数器个数
 int count = [p retainCount];
 // 计数器+1
 [p retain];
 // 计数器-1
 [p release];

// .....

4、set方法的内存管理

核心思想:release旧值,retain新值
eg:
// 假设人拥有Car对象,set方法
- (void)setCar:(Car *)car
{
   // 判断是否是新车
    if ( _car != car )
    {
       // release 旧值
        [_car release];
       // retain 新值,retain方法是有返回值的,返回值是它本身
        _car = [car retain];
    }
}

5、@property参数

  • set方法内存管理相关参数
  • 是否生成set方法
  • 多线程管理
  • setter和getter方法的名称

eg:
/*

 1.set方法内存管理相关的参数
 * retain : release旧值,retain新值(适用于OC对象类型)
 * assign : 直接赋值(默认,适用于非OC对象类型)
 * copy   : release旧值,copy新值
 
 2.是否要生成set方法
 * readwrite : 同时生成setter和getter的声明、实现(默认)
 * readonly  : 只会生成getter的声明、实现
 
 3.多线程管理
 * nonatomic : 性能高 (一般就用这个)
 * atomic    : 性能低(默认)
 
 4.setter和getter方法的名称
 * setter : 决定了set方法的名称,一定要有个冒号 :
 * getter : 决定了get方法的名称(一般用在BOOL类型)
*/

6、atuorelease

  • atuorelease本身不加减对象引用计数器,只是将对象放到自动释放池中,当池子销毁的时候自动调用对象的release方法
  • 系统自带创建对象的方法中,如果不包含alloc、new、copy,那么这些方法返回的对象都是已经atuorelease过的([NSString stringWithFormat:@"%d",100])
  • 开发中经常写一些类方法快速创建一个atuorelease的对象(创建对象的时候不要直接使用类名,用self)

eg
@autoreleasepool{
      // 创建一个atuorelease的对象
     Person *p = [[[Person alloc] init] autorelease];
    
} // 池子销毁时自动调用[p release]




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值