以下是Xcode 中profile-> leaks的信息,我在iPad 2上运行了大约21分钟,然后崩溃了12秒.
live Bytes ---- 5.45 MB
生活---- 13547
Transitory ---- 3845036
总字节数 - 720.31 MB
当应用程序在设备上运行时,应用程序会在控制台中崩溃打印已接收内存警告.
我不太清楚它是如何工作的.
但请告诉我,如果一个应用程序在一台设备上运行21分钟,在此运行期间总共使用大约720 MB的内存,但实时字节永远不会超过7.0 MB.
我接受应用程序开始使用3.25 MB作为实时字节,并且在此运行期间它在实时字节上达到5.45 MB并且我不确定实时字节如何继续增加.
但我的问题是:
这个应用程序是否足以在设备上运行时产生崩溃?
要么
我还面临其他一些问题吗?
你可能在CCTextureCache单例中留下了大量的精灵.每次创建CCSprite时,纹理都会被缓存(静默),以便下次引用它时,加载和显示将更快(更快).在模拟器中运行分配分析(参见下面的两个图片):

和

顶部图像来自设备上的分配分析.最大内存4.4 Mb.
底部图像是相同的应用程序,相同的游戏玩法序列,同时在模拟器中进行分析(峰值在78 Mb左右).通过在模拟器中运行,我可以在分配中看到我的精灵使用的内存.在设备中,分配工具不考虑此内存.
你正在寻找趋势和离散的大跳跃.如果你再也不回来,你可能会留下未使用过的精灵.在我的例子中,我选择在游戏执行的特定点从纹理中释放特定资源.这是appController的一个例子
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
MPLOGERROR(@"Before purge");
[[CCTextureCache sharedTextureCache] dumpCachedTextureInfo];
[CCAnimationCache purgeSharedAnimationCache];
[[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFrames];
[[CCDirector sharedDirector] purgeCachedData];
MPLOGERROR(@"%After purge");
[[CCTextureCache sharedTextureCache] dumpCachedTextureInfo];
}
Run Code Online (Sandbox Code Playgroud)
这是最后的沟渠,蛮力清理.但是您可以在游戏过程中删除不同点的特定纹理,而不会影响应用程序的"感知"响应性.缓存在原则上通常是合理的,但是在面对受限资源时可能变得非常棘手.了解它,进行实验,最终你会发现"保持什么/接受什么"的正确组合,以实现平滑的应用程序性能.
PS.虽然模拟器适用于某些测试,但不要将其"性能"作为基准.模拟器性能在图形方面毫无意义,它不使用计算机的GPU(这就是为什么你看到图形内存分配:)).
| 归档时间: |
|
| 查看次数: |
534 次 |
| 最近记录: |