Я использую SpriteKit для анимации в UICollectionViewCell в UICollectionView. В сцене есть один спрайт, который я анимирую с помощью SKAction. ContentView каждой ячейки имеет свой собственный SKView/SKScene. Я столкнулся с утечкой памяти. Когда я смотрю на это в Инструменте распределения в Xcode 6.3, я вижу, что с каждой новой ячейкой есть пара выделений > 1 МБ, одно из которых связано с «SKView set_context», а другое — с атрибутом allocateWCMemory GLEngine».
Внутри каждого UICollectionViewCell это довольно стандартные вещи. Я создаю другие (не связанные с анимацией) подвиды UIView и добавляю их в contentView.
Одна вещь, которая является странной и, возможно, связанной, заключается в том, что я не получаю последовательно вызываемый метод deinit UICollectionViewCell.
Мысли?
Обновления:
1) Кажется, это напрямую связано с анимацией, а не столько с представлениями коллекции. Если я просто отключу анимационную часть кода, похоже, у меня не будет утечки памяти. Или, по крайней мере, не так много памяти утекает. В этом случае SKScene/SKView по-прежнему выделяются (для каждой ячейки представления коллекции), но я просто не анимирую спрайт. Я также должен добавить, что в этом случае, с отключенной анимацией, я получаю все мои точки останова освобождения там, где они должны быть достигнуты (например, метод deinit UICollectionViewCell).
2) Теперь я снова добавил анимацию, но я просто делаю один цикл. Я делал повторяющиеся анимации (одна и та же анимация, только что повторенная, управляемая таймером). Когда я делаю это только один раз и останавливаюсь, утечки памяти нет. Итак, проблема, похоже, связана с моими повторяющимися анимациями.
UICollectionViewCell
- person Boris Y.   schedule 21.09.2015