在上一篇文章中,小编为您详细介绍了关于《opencv+cuda+gpu为何如此的慢?为什么样我的用opencv的gpu模块做个简单的算法都比cpu慢(还没有计算数据交换时间》相关知识。本篇中小编将再为您讲解标题IOS main 函数中为何要包着 @autoreleasepool ?Objective-C中的类和对象在内存中是咋运行的。
包着有什么作用? 不包会出什么问题?
我只想说 给RunLoop加上①个池的答案其实并不是很正确。
在CFRunLoopRun核心实现__CFRunLoopRun的反汇编中可以看出,rl本身就自己压了①个池,如果说只是为rl需要外界提供①个池,那显然不对,rl本身首先无法知道外界是否已经提供希望rl使用的池,而且在使用池的过程中只能使用池链的顶端的那①个,如果rl进入没有池其实也没关系,在objc_autorelease的实现里会有快速和慢速两个,快速就是根据“标兵”决定是否需要入池,慢速就是没有池可以用,需要创建①个新池,跟外部给不给无所谓。但是,重要的是在main那个池块的pop点,如果main不像这么“简单”的话,多出来的autoreleased objects将在运行的时候没有合适的释放点直到运行结束,这才是这个main的池块的关键所在。这个池块给出了①个pop点来显式的告诉我们这里有①个释放点,如果你的main在初始化的过程中有别的内容可以放在这里,当然最好是别的地方,比如 @autoreleasepool { xxx; /* do somethings*/ } @autoreleasepool { return UIApplicationMain(...); }
还有①点不知道有没有注意,可以让可以被释放的对象在return时释放掉,排除干扰,用于检查资源泄漏相关的问题。
编后语:关于《IOS main 函数中为何要包着 @autoreleasepool ?Objective-C中的类和对象在内存中是咋运行的》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《为何广播电台要在周二停机检修呢?谁知道哪里能弄到黑莓8700g的主板(能正常使用的)》,感兴趣的同学可以点击进去看看。
小鹿湾阅读 惠尔仕健康伙伴 阿淘券 南湖人大 铛铛赚 惠加油卡 oppo通 萤石互联 588qp棋牌官网版 兔牙棋牌3最新版 领跑娱乐棋牌官方版 A6娱乐 唯一棋牌官方版 679棋牌 588qp棋牌旧版本 燕晋麻将 蓝月娱乐棋牌官方版 889棋牌官方版 口袋棋牌2933 虎牙棋牌官网版 太阳棋牌旧版 291娱乐棋牌官网版 济南震东棋牌最新版 盛世棋牌娱乐棋牌 虎牙棋牌手机版 889棋牌4.0版本 88棋牌最新官网版 88棋牌2021最新版 291娱乐棋牌最新版 济南震东棋牌 济南震东棋牌正版官方版 济南震东棋牌旧版本 291娱乐棋牌官方版 口袋棋牌8399 口袋棋牌2020官网版 迷鹿棋牌老版本 东晓小学教师端 大悦盆底 CN酵素网 雀雀计步器 好工网劳务版 AR指南针 布朗新风系统 乐百家工具 moru相机 走考网校 天天省钱喵 体育指导员 易工店铺 影文艺 语音文字转换器