У меня возникли трудности с обнаружением утечки памяти. Я использую cocos2d. Это область данных для двух классов:Факторы, которые влияют на количество удержания
@interface Dungeon : CCLayerColor {
DungeonLevel *aDungeonLevel;
Player *thePlayer;
// list of all monster file names
NSMutableArray *monsterNames;
// array of how many monsters there are of each monster level
NSMutableArray *monsterLevels;
MessageView *theMessageView;
DungeonDisplay *theDisplay;
bool processing;
int currentDungeonLevel;
}
@interface DungeonDisplay : CCLayerColor {
NSMutableArray *displayGrid;
NSMutableArray *displayGrid2;
NSMutableArray *displayGrid3;
NSMutableArray *displayGrid4;
NSMutableArray *dungeonMatrix;
NSMutableArray *monsterSprites;
Dungeon *theDungeon;
int xdelt;
int ydelt;
CGPoint lowerLeft;
Player *thePlayer;
CCSprite *playerSprite;
CCSprite *mSprite1;
ButtonsLayer *buttonArea;
double previousTime;
double currentTime;
double touchTimePrev;
bool touchFlag;
bool processing;
bool processing2;
bool animating;
bool flipSprite;
bool doIdleAnimation;
bool isAttacking;
int firstIteration;
CGPoint dungeonOriginalPosition;
CGPoint playerOriginalPosition;
CGPoint mSprite1Original;
CGPoint buttonOriginal;
CCTimer *myTimer;
// List of Messages
NSMutableArray *messages;
int messageIndex;
// player transparency level
int transparency;
// indicates that walls need to become transparent
bool needTransparency;
int pXInc;
int pYInc;
int tempx;
int tempy;
// debugging variables
CCLabelTTF *debugLabel1;
CCLabelTTF *debugLabel2;
// the Map
MiniMap *aMap;
}
Хорошо, теперь объект Dungeon создает объект DungeonDisplay путем взаимодействия с другим объектом, DungeonLevel (я не думаю, что это особенно важно, чтобы выяснить, почему DungeonDisplay не перераспределена). Это весь код для создания «одиночки» объект DungeonDisplay:
-(void) displayDungeon
{
if (!theDisplay) {
theDisplay = [[DungeonDisplay alloc]init];
[self addChild:theDisplay z:101];
[theDisplay letTheDungeon:self];
}
else {
[thePlayer placePC:thePlayer.pCLocation];
[theDisplay displayStructure];
}
theDisplay.visible = true;
aDungeonLevel.visible = NO;
}
По какой-то причине, после AddChild (в Кокосовом методе) Сохранять счетчик переходит на 4 (с 1). «letTheDungeon» не влияет на количество удержаний (как и ожидалось).
Можете ли вы предоставить небольшой контекст? Каким типом объекта является этот вызов, и какой объект является «DungeonDisplay»? Правильно ли я полагаю, что 'addChild' - это метод, который вы написали (и в этом случае вы можете поделиться этим кодом с нами тоже)? Когда я видел, что подсчеты прыгают так, это было результатом моего добавления в NSMutableArray/NSMutableDictionary и пренебрежения удалением из этой структуры. Но нам этого недостаточно, чтобы диагностировать его. Я знаю, что это больно, но можете ли вы дать нам больше контекста и больше связанного кода? – Rob
Стационарный анализатор дает вам чистый счет здоровья? Shift-command-B - это все, что требуется для анализа вашего кода. – Rob