Я не очень хорошо разбираюсь в управлении памятью, поэтому я начну с этого как отказ от ответственности, но я попытался выяснить насколько смогу о моей текущей проблеме , Я использую Spritebuilder для создания приложения (использует cocos2d), и всякий раз, когда я переключаюсь между двумя сценами, я получаю медленную память в моей игре. Я смотрю вкладку «Память» в «Навигаторе отладки».Накопление памяти (обнаружено не обнаружено утечек) с помощью Spritebuilder
Теперь я создал новый проект в Spritebuilder, чтобы узнать, есть ли у этого приложения новое решение. Это не так. Так ясно, что в моей жизни что-то происходит.
Я отследил его немного дальше. Одна из сцен в моей игре, к которой я перехожу, - это просто простой экран меню с паролем CCButtons, а другой - более прокручиваемая карта уровня с множеством CCButtons, множеством текстур ... и т. Д. Очевидно, что память всегда создавалась, когда я переключился на более сложную сцену уровня. У меня около 60 CCButtons на этом уровне сцены, и решил удалить их все и выполнить один и тот же тест. На этот раз, когда все CCButtons были удалены, я не видел, чтобы память накапливалась (или, по крайней мере, она наращивала на 1/100 суммы каждый раз, когда я переключался). Поэтому я думаю, что это основная причина создания этой памяти - то, как я выделяю память для своих кнопок.
Я открыл инструмент инструментов в Xcode и искал утечки, но не нашел (не очень хорошо это использовал, но это показалось несколько простым). Поэтому я чувствую, что я просто выделяю память, которая, возможно, не нужна?
Кроме того, я не уверен, что вкладка «Память» точно означает. Это проблема, если это происходит, когда я использую приложение больше и больше? Ниже приведен метод, который я использую для инициализации кнопки в моей сцену уровня.
-(void)createButtonAt:(CGPoint)buttonLocation buttonTitle:(NSString*)buttonTitle buttonNumber:(int)buttonNumber{
tempButton = [CCButton buttonWithTitle:buttonTitle
spriteFrame:redTile
highlightedSpriteFrame:redTile
disabledSpriteFrame:nil];
tempButton.label.color = [CCColor colorWithRed:0 green:0 blue:0];
tempButton.block = ^(id sender) {
for (int i = 1; i < buttonNumber; i++) {
[[LevelManager sharedInstance] nextLevel];
}
levelNumber = i;
[self loadMyViewController];
};
tempButton.scale = 0.3
tempButton.label.fontName = @"HelveticaNeue-Bold";
tempButton.label.fontSize = 34;
tempButton.anchorPoint = ccp(0.5, 0.5);
tempButton.position = buttonLocation;
[self addChild:tempButton];
[buttonArray addObject:tempButton];
}
При первой загрузке игры я был бы при 14 МБ. После загрузки всех моих уровней и сцен я бы составил около 60 МБ. Затем каждый раз, когда я играл на этом уровне, память увеличивалась бы на 6-7 МБ. Это проблема? Пожалуйста, дайте мне знать, если есть конкретная причина, по которой это происходит, или какие-то ресурсы для устранения этого. Благодаря!
Спасибо, что позволили мне перейти в цикл сохранения. Я прокомментировал блок и перепробовал свой проект, и я понял, что память исчезла. Так что это преступник. К сожалению, хотя копирование кода в мой проект не помогло. Здесь что-то не хватает? – spaderdabomb
Хммм ... не определен, где взять его отсюда. __weak ref решил это для меня. Прежде чем я это сделал, я использовал для установки каждого свойства блока CCControl в нуле в удобном месте (onExit в моем случае, но будет вызываться только тогда, когда узел будет удален из его родителя). – YvesLeBorg