2016-06-30 13 views
3

私のアプリケーションのメインビューとしてUITableViewがあります。このUITableViewの内容は、WebからHTTPリクエスト(JSON)を使用して一度に5項目ずつ読み込まれます。このリクエスト部分にはパフォーマンス上の問題はありません。UITableViewのパフォーマンスが低い理由を特定する方法

その後、JSONデータのコンテンツに従ってプログラムでセルが生成されます。たとえば、JSONにセルが1 UILabel、1 UITextFieldおよび1 UIButtonの場合は、 UITableViewCellを修正するためにこれらをサブビューとして追加します。セルの初期状態にも問題はありません。

下にスクロールすると、新しいアイテムがウェブから読み込まれ、これがメソッドによって「負荷を増やす」機能がトリガーされます。

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) { 
    let lastElement = data.jsonArray.count - 2 
    if indexPath.row == lastElement { 
     page += 1 
     getFeed() 
    } 
} 

しかし、下にスクロールすると、小さなフリーズとラグが気付くことがあります。これは非常に悪く見えます。なぜこれらの小さな凍結が起こるのか分かりません。

これは今見た目です。私はエミュレータでこれを記録しましたが、実際のデバイスではそれはずっと悪いです。

私はここで何をすべきか分かりません。どんなアドバイスですか?ありがとう。あなたはそれが常にlag.For 経験をするだろうスムーズにあなたは配列に格納 事前&で10-15 JSONオブジェクトをフェッチする必要がある各セルのためにサーバーからデータをフェッチするよう

+1

あなたは 'cellForAtIndexPath:'にコードを投稿できますか? – Proton

+0

非常に長くて複雑です。 –

+0

最後のインデックスで頻繁にスクロールするときに 'getFeed'が複数回呼び出されます。すでに実行中の場合はメソッドを呼び出さないようにする必要があります。 – Mahesh

答えて

1
  • 。新しいリクエストを作成するたびに、アレイ内のこれらのオブジェクトを追加します( )。
  • したがって、各セルに対してサービスリクエストを行うのではなく、 セルを10-15セル後に要求します(json オブジェクトのフィールド数が少ない場合はこの数を増やすことができます)。 が新たにリクエストすると、下部にスピナーを表示できます。このため
  • また、このメカニズムはまた、ページネーションとして知られている10-15

の配列であなたに オブジェクトを与えるために、サーバー側のメカニズムを作成する必要があります。

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { 

    if ((indexPath.row == array.count - 1)) { 
     // This is the last cell 
     [self loadMore]; 
    } 
} 

// Load more 
- (void)loadMore { 

    //make service request for next page (Make sure your response contains next 10 objects) 
    //on response add those objects in the array 
    //reload table view 
    [self.tableView reloadData]; 
} 
+0

申し訳ありませんが私の質問は明らかではなかった、私は実際に一度に5つの項目をフェッチします。 –

+0

このアプローチを5つのオブジェクトにも設定できます。より明確にするために質問を編集してください。 –

+0

セルからすべてのビューを削除しました。彼らは正常に動作し、パフォーマンスに影響しないようです。問題はおそらくビューがセルに追加される方法です。 –

関連する問題