在使用autorelease()可以达到与release()同样的效果,甚至还能避免release()的许多隐患的情况下,是不是应该完全用autorelease()代替release()呢?
实际上,autorelease()并不是没有代价的,其背后的垃圾回收池机制同样需要占用cpu和内存资源,每次autorelease()执行的过程,实际上对应的是执行成对的retain()和release(),以及一次成对的容器存取,还包括其他逻辑的判断。过多不必要的autorelease()将导致垃圾池臃肿膨胀,在存在大量内存 *** 作的程序中会尤为严重地挤占本来就很紧张的系统资源。
此外,autorelease()只有在自动释放池被释放时才会进行一次释放 *** 作,如果对象释放的次数超过了应有的次数,则这个错误在调用autorelease()时并不会被发现,只有当自动释放池被释放时(通常也就是游戏的每一帧结束时),游戏才会崩溃。例如,在游戏中,一个对象含有1个引用计数,但是却被调用了两次autorelease()。在第二次调用时,游戏会继续执行这一帧,当游戏结束这一帧时才会崩溃,很难找到出错的地方。
因此,建议在开发过程中应该避免滥用autorelease(),只有在工厂方法等不得不用的情况下使用,尽量以release()来释放对象引用。
总结以上是内存溢出为你收集整理的cocos2d-x内存释放:release()还是autorelease()?全部内容,希望文章能够帮你解决cocos2d-x内存释放:release()还是autorelease()?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)