2016-07-18 22 views
0

私は多くのメモリ不足の警告を受けており、最終的にはiOSアプリでクラッシュしています。Swiftアレイをリセットすると、強い参照が発生しますか?

UICollectionTableのデータモデルに含まれている強い/未知の参照と関係していると思われる何らかの理由があります。これは、非選択的なタイプのBrowsableRecipeのオブジェクトの配列です。次のように私は配列を初期化:

データはサーバから非同期呼び出しから返さ BrowsableRecipe秒のリストである
var recipes = [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が設定されている、と dataBrowsableRecipesの完全に異なるリストを参照した後、これが起こっている
self.recipes = data 

。配列内の項目を通過し、それぞれBrowsableRecipenilに設定する必要がありますか?また、BrowsableRecipeはオプションではないため、エラーが発生する可能性があります。

+1

これがあなたの記憶上の問題を引き起こす原因であると信じる理由は何ですか?あなたが示したコードには何も問題はありません。アレイ内のオブジェクトは、何も保持していない限り、解放されます。 – dan

+0

"考える"必要はありません。漏出計器を使用してください。 – Paulw11

答えて

0

どのようにのように最初の "空" のアレイについて:

self.recipes = [] 

self.recipes = data

self.recipes.removeAll 

+2

これは、アプリケーションのメモリ使用には影響しません。単に新しい配列を割り当てるだけで参照カウントを減らすことができ、ARCがその処理を行います。 – Paulw11

関連する問題