2015-06-24 3 views
0

Я использую SpriteKit для создания анимаций в UICollectionViewCell's в UICollectionView. На сцене есть один спрайт, который я оживляю, используя SKAction. ContentView каждой ячейки имеет собственный SKView/SKScene. Я сталкиваюсь с утечкой памяти. Когда я смотрю на это в инструменте Allocations Instrument в Xcode 6.3, я вижу, что с каждой новой ячейкой выделяется пара> 1 Мбайт, одна из которых относится к «SKView set_context», другая относится к allocateWCMemory GLEngine ».Утечка памяти с помощью SpriteKit в коллекции View Cells

Внутри каждого UICollectionViewCell, это довольно стандартный материал. Я создаю другие (не связанные с анимацией) подпрограммы UIView и добавляя их в contentView.

Одна вещь, которая нечетна и, возможно, связана с тем, что я не получаю метод deinit UICollectionViewCell-х последовательно называется.

Мысли?

Обновления:

1) Это похоже на анимацию и не столько на представления коллекции. Если я просто отключу часть анимации кода, я, похоже, не получаю утечку памяти. Или, по крайней мере, не так много утечки памяти. В этом случае SKScene/SKView по-прежнему получают выделение (на ячейку коллекции), но я просто не анимирую спрайт. Я также должен добавить, что в этом случае, когда анимация отключена, я получаю все точки останова на удалении, попадающие туда, где они должны быть удалены (например, метод UICollectionViewCell deinit).

2) Теперь я добавил анимацию, но я просто делаю один цикл через нее. Я делал повторные анимации (ту же анимацию, просто повторяющуюся, контролируемую таймером). Когда я делаю это только один раз и останавливаюсь, нет утечки памяти. Итак, проблема, похоже, связана с моими повторными анимациями.

+0

Итак, у каждой ячейки есть SKView/SkScene? Sprite Kit действительно не поддерживает несколько экземпляров Scenes. Должен быть лучший способ реализовать то, что вы пытаетесь сделать. –

+0

Спасибо @Epic Byte. Можете ли вы показать мне документ Apple, указывающий, что несколько экземпляров Scene не поддерживаются? –

+0

@EpicByte, поэтому, если бы я хотел использовать SpriteKit и UICollectionView, например, для игры Tic-Tac-Toe, это было бы невозможно? Я хочу иметь один спрайт в своем «UICollectionViewCell» –

ответ

0

Эта утечка памяти, по-видимому, имеет мало или ничего общего с SpriteKit или Collection Views. Я представлял UICollectionView в модульном контроллере просмотра, и что (Objective C) модальный имел проблему, которая, кажется, возникла только при подключении к Swift. Содержащий контроллер модального представления не освобождался. Таким образом, объекты, которые он содержал (например, UICollectionView, и внутри этого, SKView/SKScene), не освобождались.

Этот модный подарок от UINavigationController. Используя этот класс Objective-C мостиком для Swift, я нахожу, что нужно добавить в строку:

// popupNavController is the UINavigationController used to present the modal view controller 
self.popupNavController.viewControllers = nil; 

когда я отклоняя модальный.

+0

Вы можете отметить это как принятый ответ –

0

Не смотря на код, трудно сказать, но есть одна вещь, которую вы должны найти: Есть ли в вашем SKActions блок, который ссылается на self? Если это так, это может привести к циклу удержания. Вам нужно будет получить weak ссылку на self в этом случае (это будет отличаться от Swift и Objective C, но они оба понадобятся) Хорошее объяснение (и достойные примеры Swift) можно найти в this post.

+0

У меня не было SKActions, который назывался сам. –

 Смежные вопросы

  • Нет связанных вопросов^_^