2016-07-18 4 views
0

Я получаю много предупреждений о низкой памяти и, в конечном счете, сбой в моем приложении iOS.Сброс массива Swift вызывает сильные ссылки?

У меня есть основания полагать, что это связано с сильными/неизвестными ссылками, содержащимися в модели данных для UICollectionTable, который является необязательным массивом нефакульных объектов типа BrowsableRecipe. Я инициализировать массив следующим образом:

var recipes = [BrowsableRecipe]() 

где данные список BrowsableRecipe с вернулся из асинхронного вызова от сервера.

ServerMessenger.sharedInstance.getRecipesForHomePage(recipeIndex, pageSize: pageSize){ responseObject, error in 
    if let data = responseObject{ 
    //TODO confirm first recipe object doesn't have error param set! 

    self.recipes = data 
    self.recipeIndex = self.recipeIndex + 1 
    dispatch_async(dispatch_get_main_queue()) { 
     self.collectionView!.reloadData() 
    } 
    } 

Где я думаю, что проблема заключается в том, что, когда я сбросить массив self.recipes в новый список данных, я думаю, что старый массив объектов как-то по-прежнему сохраняется или, что указывает на каждой BrowsableRecipe как-то еще сохраняется в памяти. Я думаю, что здесь происходит:

self.recipes = data 

, где это происходит после того, как self.recipes были установлены, и data относится к совершенно другому списку BrowsableRecipes. Нужно ли мне проходить элемент в массиве и устанавливать каждый BrowsableRecipe в nil? Также это может привести к ошибке, поскольку BrowsableRecipe не является необязательным.

+1

Какова ваша «причина полагать», что это то, что вызывают проблемы с памятью? Нет ничего плохого в коде, который вы показали, и объекты в массиве будут выпущены до тех пор, пока на них не будет ничего другого. – dan

+0

Вам не нужно «думать»; используйте инструмент «Утечки». – Paulw11

ответ

0

Как насчет первого "опорожнение" массива, как так:

self.recipes = [] 

или

self.recipes.removeAll 

перед тем self.recipes = data?

+2

Это не повлияет на использование памяти в приложении. Простое назначение нового массива достаточно, чтобы уменьшить счетчик ссылок, и ARC выполнит свою задачу. – Paulw11

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

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