黑马程序员------ios培训 oc内存管理(二)

本文深入讲解了Objective-C中autorelease机制的原理与应用技巧,并详细介绍了ARC(自动引用计数)的特点及如何避免循环引用等问题。

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


                                         ------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

一.autorelease::

1.autorelease简单接受

    1.>autorelease方法返回值是本身。

2.>调用autorelease方法后对象计数器不变

    3>autorelease调用后会将对象放到一个自动释放池中

    4>当能够自动释放池销毁时会对池子中所有的对象进行一次release

2.autorelease方法的好处

    1>不再关心对象释放的时间

     2>不用关心对象什么时候release

3.autorelease 方法使用的注意点

    1>占用内存较大的对象不要随意使用autorelease

    2>对占用内存较小的对象有影响 但影响不大

4.autoelease错误写法

    1>对自动释放池中的对象有进行一次release

 例:

autorelease{
	Person *p = [[[Person alloc] init] autorelease];
	[p release];
} 

   2>调用两次autorelease

autorelease{
	Person *p = [[[[Person alloc] init] autorelease] autorelease];
} 

5.自动释放池

   1>在iOS程序中会创建无数个池子,这些池子都是以栈结构存在(先进后出)

    2>当一个对象调用autorelease方法时会将这个对象放到栈顶的释放池

6.关于创建一些类方法

    1.>系统中自带的方法里没有alloc 、new、copy说明返回的对象都是已经autorelease过了

     2.>开发中经常会提供一些类方法,快速创建一个已经autorelease过的对象

例:

+ (id)person
{
	return [[[self alloc] init ]  autorelease];
}

+ (id)personWithAge:(int)age
{
	Person *p = [[[self alloc] init ]  autorelease];
	p.age = age;
	return p;
}
二.ARC

1.ARC是一种编译器特性

2.关于指针

   1>强指针:默认情况下所有的指针都是强指针

    2>弱指针:"_weak"标示的指针

3.ARC的判断准则:只要没有强指针指向对象就会释放对象

4.ARC特点

1>不允许调用release retain retainCount

2>允许重写dealloc但不允许调用    [super dealloc];

3>property参数

      *strong  成员变量是强指针(适用于oc对象)

       *weak 成员变量是弱指针

        *assign 适用于非oc对象

5.关于循环引用的问题在ARC特型中的解决方法:一端用strong,一端用weak






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值