Я получаю много предупреждений о низкой памяти и, в конечном счете, сбой в моем приложении 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
не является необязательным.
Какова ваша «причина полагать», что это то, что вызывают проблемы с памятью? Нет ничего плохого в коде, который вы показали, и объекты в массиве будут выпущены до тех пор, пока на них не будет ничего другого. – dan
Вам не нужно «думать»; используйте инструмент «Утечки». – Paulw11