fra*_*ank 2 autorelease nsthread nsautoreleasepool runloop ios
我有一个关于autorelease的问题,现在我有以下代码:
int main(int argc, char *argv[]){
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}}
Run Code Online (Sandbox Code Playgroud)
doc在@autoreleasepool {}结尾处说标记为autorelease的对象将收到一条释放消息.但是UIApplicationMain永远不会返回,这意味着流程永远不会到达@autoreleasepool的末尾,那么标记为autorelease的对象将永远不会释放,直到应用程序死掉.自动释放没有意义.....
我问过有人说iOS系统会生成一些线程,(你知道,一个线程,一个runloop).他说runloop会创建自动释放池.所以自动释放对象将在thead或runloop结束时释放.但在大多数情况下我们使用主线程.所以他所说的并不能说服我.
什么是使用自动释放的适当时间.它困惑了我很长一段时间.
我得到另一个观点,当一个runloop结束时,autorelease对象将被释放(主runloop将存在所有应用程序的生命?)所以我不确定..
任何要点和相关文件将不胜感激!
是的,从技术上讲,UIApplicationMain永远不会返回,所以它永远不会到达那个@autoreleasepool块的结尾,所以在这种情况下,如果你删除了那个@autoreleasepool块就没有区别(除了可能抱怨他们已经自动释放而没有自动释放池的事情).但是,可以想象一个main以不总是调用的方式编写的函数UIApplicationMain(可能不是在iOS应用程序中,而是一般); 那会有所作为.
最好总是@autoreleasepool在每个线程的入口点的主体周围放置一个块,并且main是主线程的入口点.所以为了保持一致性,总是把它放在那里是有意义的.
你谈到的人所说的是内部UIApplicationMain,有一个运行循环(一个处理事件的无限循环),并且在每次迭代中都有一个自动释放池(或者可能每几次迭代;它是一个实现细节).这与自动释放池无关main.
| 归档时间: |
|
| 查看次数: |
782 次 |
| 最近记录: |