Image Cocos2d。是否正确加载和存储图像?

Image Cocos2d。是否正确加载和存储图像?,image,cocos2d-iphone,ccsprite,cclayer,cctexturecache,Image,Cocos2d Iphone,Ccsprite,Cclayer,Cctexturecache,这个问题有很多答案。但是所有这些都是不正确的 例如,如果我使用一个CCSprite对象创建了一个CCLayer对象。我有3种纹理,每次触摸都要在它们之间切换 例如,我将使用类似以下内容: 我在模拟器中运行这个应用程序。然后我调用内存警告。然后我尝试在图像(纹理)之间切换。我看到3个图像中有2个被删除(除了在显示内存警告的同时显示的图像) 我尝试对CCSprite和ССTexture2D使用retain/release命令,但它们会导致从未调用released对象的dealloc方法的情况 那么

这个问题有很多答案。但是所有这些都是不正确的

例如,如果我使用一个CCSprite对象创建了一个CCLayer对象。我有3种纹理,每次触摸都要在它们之间切换

例如,我将使用类似以下内容:

我在模拟器中运行这个应用程序。然后我调用内存警告。然后我尝试在图像(纹理)之间切换。我看到3个图像中有2个被删除(除了在显示内存警告的同时显示的图像)

我尝试对CCSprite和ССTexture2D使用retain/release命令,但它们会导致从未调用released对象的dealloc方法的情况


那么如何正确地存储它们呢?我想将它们存储在内存警告中,并在当前层被破坏时释放/删除它们。

默认情况下,内存警告cocos2d将删除未使用的纹理。内存警告的全部要点是,操作系统会告诉你的应用程序“嘿,这不好,降低你的内存需求,否则我会让你关机”,你的应用程序应该像“哦,对不起,现在释放内存”一样。如果你在预加载纹理时收到内存警告,cocos2d删除未使用纹理的默认行为会让你大吃一惊


我的建议:在AppDelegate的内存警告方法中删除清除cocos2d缓存的调用。当然,你要特别小心你的内存使用。或者,您可以在预加载图像时简单地禁用该行为,但这可能只是将问题转移到以后的某个点。

将它们存储在一个使用纹理打包器创建的纹理图集中。然后只需调用[Sprite setDisplayFrame:frameName]即可切换显示的纹理。

它们不是未使用的!我想选择要删除的纹理。不是所有的。iOS是否会删除可见矩形之外的所有图形对象?从未。它允许在didReceiveMeroryWarning中写入内容。因此,调用[CCSprite spriteWithFile:…]而不是使用纹理会更好吗?