Objective-C Autorelease Pool 的实现原理(1)
作者:本站整理 时间:2015-06-19
分析:3 种场景下,我们都通过 [NSString stringWithFormat:@"leichunfeng"] 创建了一个 autoreleased 对象,这是我们实验的前提。并且,为了能够在 viewWillAppear 和 viewDidAppear 中继续访问这个对象,我们使用了一个全局的 __weak 变量 string_weak_ 来指向它。因为 __weak 变量有一个特性就是它不会影响所指向对象的生命周期,这里我们正是利用了这个特性。
在开始前,我先简单地说明一下原理,我们可以通过使用 lldb 的 watchpoint 命令来设置观察点,观察全局变量 string_weak_ 的值的变化,string_weak_ 变量保存的就是我们创建的 autoreleased 对象的地址。在这里,我们再次利用了 __weak 变量的另外一个特性,就是当它所指向的对象被释放时,__weak 变量的值会被置为 nil 。了解了基本原理后,我们开始验证上面的猜测。
设置好观察点后,点击 Continue program execution 按钮,继续运行程序,我们将看到如下图所示的界面:
0x0000000000000000 ,也就是 nil 。说明此时它所指向的对象被释放了。另外,我们也可以注意到一个细节,那就是 console 中打印了两次对象的值,说明此时 viewWillAppear 也已经被调用了,而 viewDidAppear 还没有被调用。
另外,值得一提的是,我们在代码中并没有手动添加 autoreleasepool ,那这个 autoreleasepool 究竟是哪里来的呢?看完后面的章节你就明白了。
相关文章
相关推荐
-
小吧离线浏览器 2.0(离线浏览器)
-
2345输入法v2.3.1350(拼音输入法)官方下载
-
R-Studio 7.2.155105 特别中文版(数据备份恢复软件)
-
排课高手 25.25(课程编排助手)
-
腾讯企点官方版 v1.4.0
-
桌面启动精灵 2.6(桌面图标管理)
-
U盘杀毒专家官方版 v3.21
-
CintaNotes绿色版 V3.4
-
Teorex Inpaint 64位版 v6.2
-
腾讯QQ8.8去广告增强版 v8.8.19876
-
小新PDF阅读器 V1.7.0.1官方版(pdf阅读器)
-
七彩色图片批量处理工具官方版
-
张国伟跳高表情包完整版
-
FineReport报表软件 8.0(报表制作工具)
-
客所思pk1驱动免费版 v1.2.8.13
-
火狐浏览器官方版