c语言编写arc

 2024-03-18 01:14:41  阅读 0

如何监控 oc 对象

1 = 对象

2 重新加载

-------------------------------------------------- -

实施ARC

苹果官方的描述称ARC是“由编译器管理的内存”,但实际上只有编译器不能完全胜任。 ARC还依赖于OC运行时库,这意味着ARC使用以下工具和库。 实施的:

● clang(LLVM编译器)3.0或更高版本

● objc4 OC运行库493.9或以上

如果按照Apple的说明,只有编译器管理内存,那么修饰符也可以在iOS 4中使用

修饰语

众所周知,修饰符提供了神奇的效用。

● 如果修饰符引用变量被丢弃,则将把nil 赋给该变量。

● 使用带有修饰符的变量意味着使用已注册的对象。

我们看一下它的实现:

{

       id __weak obj_weak = obj;    //obj已被赋值,并且是strong类型的

 }

/*编译器的模拟代码*/

id obj_weak;

objc_initWeak(&obj_weak,obj);   //初始化附有__weak修饰符的变量

objc_destroyWeak(&obj_weak);    //释放该变量

都是调用函数,所以上面的代码可以转化为下面的代码

id obj_weak;

obj_weak = 0;

objc_storeWeak(&obj_weak,obj);

objc_storeWeak(&obj,0);

objc_storeWeak函数以把obj的地址作为键值,obj_weak的地址作为值存放到weak表(weak是一个hash表)中。

当一个对象被释放并被丢弃时,程序的动作是什么? 对象被释放。

1.

2.因为引用计数为0而执行

3.

4.

5.e

6. ing

然而的动作如下:

1、从弱表中获取地址为废弃对象键值的记录。

2、将记录中包含的所有修饰符变量的地址赋值为nil

3.删除弱表记录

4、从引用计数表中删除以废弃对象地址为键值的记录

按照上面的步骤,如果丢弃带有修饰符的变量所引用的对象,就会给该变量赋值nil,从而实现这个功能。

使用修饰变量的第二个作用是使用注册的对象。

{

 id __weak obj_weak = obj;//obj已被赋值,并且是strong类型的

 NSLog(@"%@",obj_weak);

 }

代码转换成如下形式:

/*编译器的模拟代码*/

id obj_weak;

objc_initweak(&obj_weak,obj);

id tmp = objc_loadWeakRetained(&obj_weak);

objc_autorelease(tmp);

NSLog(@"%@",tmp);

objc_destroyWeak(&obj_weak);

与赋值时相比,使用带修饰符的变量时,对d函数和函数的调用较多。 这些函数的动作如下:

1、d函数取出修饰符变量引用的对象并

2. 该函数将对象注册到。

可以看到,由于修饰符变量引用的对象是这样注册的,所以可以放心使用,直到@块结束。

注意:OC中有一些类不支持ARC,比如. 可以使用 / 方法判断是否支持ARC

标签: 修饰 变量 引用

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码