2016-07-18 12 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

相关问题