重置Swift数组会导致强引用吗?

时间:2016-07-18 20:55:28

标签: ios arrays automatic-ref-counting

我收到许多内存不足警告,最终导致我的iOS应用程序崩溃。

我有理由相信它与UICollectionTable的数据模型中包含的强/未知引用有关,BrowsableRecipe是一个非可选的类型{{1}的非可选对象数组}。我按如下方式初始化数组:

var recipes = [BrowsableRecipe]() 

其中data是从服务器的异步调用返回的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重置为新的数据列表时,我认为旧的对象数组仍然以某种方式保持或者每个{{1}的点数在某种程度上仍然存在于记忆中。我认为它发生在这里:

BrowsableRecipe

在设置 self.recipes = data 后发生这种情况,self.recipes引用完全不同的data列表。我是否需要浏览数组中的项目并将每个BrowsableRecipes设置为BrowsableRecipe?这也可能导致错误,因为nil不是可选的。

1 个答案:

答案 0 :(得分:0)

第一次"排空"像这样的数组:

self.recipes = []

self.recipes.removeAll

之前的self.recipes = data