首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由[NSBundle mainBundle]声明的CFString对象

由[NSBundle mainBundle]声明的CFString对象
EN

Stack Overflow用户
提问于 2012-01-25 21:52:53
回答 2查看 940关注 0票数 4

我正在努力提高我的ios cocos2d游戏的性能。当我在Instruments工具的帮助下检查应用程序的内存分配时,我注意到一件事。NSBundle mainBundle call声明和持有的CFString对象太多。上面写着,

类别: CFString (不可变)负责调用者: NSBundle mainBundle

在我的代码中有很多地方我写了以下几行

代码语言:javascript
复制
[[NSBundle mainBundle] pathForResource:@"resource-name" ofType:@"png" isDirectory:imageDirectory];

这个CFString问题是因为上面的代码,因为我在pathForResource方法中给出了一个硬编码的字符串吗?或者这个问题的原因是什么?有人能帮帮忙吗?这种CFString分配占用了我大约2Mb的代码,所以我很担心。

诚挚的问候

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-16 03:17:05

这些CFString是由于您的应用程序包中有大量资源造成的。在我的测试中,我发现在包的根目录下为每个文件分配了1个CFString。这大概是某种路径名的缓存。

我目前正在开发一个捆绑包中有1000个资源的应用程序,这些不可变的字符串占用了大约300K。当我删除它们中的大多数时,我最终得到了大约20K,捆绑包中大约80个资源的大约100个CFStrings。

似乎减少这些的答案是将Resources放在捆绑包中的子目录中。您可以使用Xcode中的“文件夹引用”来完成此操作。

例如,您的游戏可能有1,000个PNG。将这些文件放在项目中名为"Assets“的文件夹中(磁盘上)。将"Assets“目录拖到Xcode中,创建一个文件夹引用,而不是创建一个Group。

票数 4
EN

Stack Overflow用户

发布于 2012-01-26 01:22:50

不,这不是NSBundle分配字符串的原因,也不是,你没有做错什么。-NSBundle mainBundle实际上分配了2MB的字符串,这似乎非常不可能,所以我建议您查看一些其他的分配堆栈跟踪,看看是否能找到真正的罪魁祸首。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9003812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档