runloop 线程 autorelease

1.runloop和线程。
Input Sources输入源 & Timer Source定时源;
输入源可以是键盘鼠标;定时源是NSTimer事件。nsidic一一对应,runloop是一种消息循环机制,每一个线程内部都有一个消息循环
只有主线程消息循环默认开启,子线程的消息循环默认不开启,只有去get才能创建runloop

1.arc 编译器自动会插入Release/Retain代码 在合适的位置释放( 1. __strong跟作用域有关, __weak跟weak表和作用域有关,当对象自己没有拥有者也会释放, 2.如果是方法返回对象默认插入autorelease )如果autorelease 是自己手动生成,会在autorelease drain 变量释放,如果是隐式创建(每一个线程都包含自己的autoreleasepool Each thread (including the main thread) maintains its own stack of NSAutoreleasePool objects (see Threads)会被添加到最近一次创建的自动释放池中,并会在当前的 runloop 迭代结束时释放也就是runloop)

  • 自动释放池是什么时候创建的?什么时候销毁的?
  • 创建,运行循环检测到事件并启动后,就会创建自动释放池
  • 销毁:一次完整的运行循环结束之前,会被销毁

2.autorelease autoreleasepool 自动创建和runloop的关系。

autorelease 延迟释放,实际上是添加到当前pool里面了。

autoreleasepool的释放:

1)、手动释放Autorelease pool

2)、runloop中隐式创建的autoreleasepool Runloop结束后自动释放(系统自动去释放 - 不手动指定autoreleasepool
Autorelease对象出了作用域之后,会被添加到最近一次创建的自动释放池中,并会在当前的 runloop 迭代结束时释放。)

3.nstime和runloop的关系。
4.查看源码:cf 和 objc下载。


![97C126A0-0E51-4871-8755-146FEA3A760A.png.png](http://upload-images.jianshu.io/upload_images/636362-543ee5671648483c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
5B944CD7-2217-40E2-9BD8-663D5037BD47.png.png
runloop 线程 autorelease_第1张图片
45FDBB55-A7F7-4DB5-B6D3-13F137EC9345.png.png

http://www.gnustep.org/resources/downloads.php

runloop 线程 autorelease_第2张图片
E54C93BC-D5A4-4AFD-A9F4-326DD25A4097.png.png
runloop 线程 autorelease_第3张图片
42A3E4BF-131D-42FC-A10E-9C7CABCAAC7B.png.png

1,实例方法里面的self,是对象的首地址。
2,类方法里面的self,是Class.

runloop 线程 autorelease_第4张图片
D6CD730A-690A-4022-A7DC-0B742D93AF79.png.png

1)地址法
student+i和p+i均表示数组第i个元素的地址,数组元素各成员的引用形式为:
(student+i)->name、(student+i)->num和(p+i)->name、(p+i)->num等。student+i和p+i
与&student[i]意义相同。

http://blog.jobbole.com/45963/
http://blog.jobbole.com/65028/
http://blog.csdn.net/lvdezhou/article/details/49510531
http://blog.csdn.net/holandstone/article/details/8282932

http://www.cocoachina.com/industry/20140417/8182.html
http://www.cocoachina.com/industry/20140415/8163.html
(ARC实际上依托于“.cxx_destruct”,现在它为所有的Objective-C类创建了一个函数来写所有的自动消除代码。
编译器通过自动在代码中添加alloc和dealloc来构造和析构C++栈对象以确保这种情况。在此过程中,编译器需要创建两个函数“.cxx_construct”和“.cxx_destruct”,这两个函数分别被alloc和delloc调用。在这写方法中,执行所有相关的C++处理是必要的。)

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Helvetica Neue'; color: #454545}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Helvetica Neue'; color: #e4af0a}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Helvetica Neue'; color: #454545; min-height: 14.0px}span.s1 {font: 12.0px '.PingFang SC'}

1.iOS 设备启动过程
http://blog.csdn.net/hk_5788/article/details/52223662

2.编译自己的runtime
http://blog.csdn.net/wotors/article/details/52489464

你可能感兴趣的:(runloop 线程 autorelease)