黑马程序员技术交流社区
标题:
、autorelease释放的具体原理
[打印本页]
作者:
ximdefangzh
时间:
2015-9-21 22:11
标题:
、autorelease释放的具体原理
要搞懂具体原理,则要先搞清楚autorelease何时会创建。 我们的程序在main()调用的时候会自动调用一个autorelease,然后在每一个Runloop, 系统会隐式创建一个 Autorelease pool,这样所有的release pool会构成一个象CallStack一样的一个栈式结构,在每一个 Runloop结束时,当前栈顶的 Autorelease pool(main()里的autorelease)会被销毁,这样这个pool里的每个 Object会被release。 可以把autorelease pool理解成一个类似父类与子类的关系,main()创建了父类,每个Runloop自动生成的或 者开发者自定义的autorelease pool都会成为该父类的子类。当父类被释放的时候, 没有被释放的子类也 会被释放,这样所有子类中的对象也会收到release消息。 那什么是一个Runloop呢? 一个UI事件,Timer call, delegate call, 一个鼠标事件,键盘按 下(MAC OSX),或者iphone上的触摸事件,异步http连接下后 当接收完数据时,都会是一个新的 Runloop。 一般来说,消息循环运行一次是毫秒级甚至微秒级的,因此 autorelease的效率仍然是非常高的, 确实是一个巧妙的设计。
作者:
wjy0916
时间:
2015-9-21 22:15
好好学习天天向上
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2