0

これは、テーブルビューのカスタム セルを表示するために使用しているコードです。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *CellIdentifier = @"CustomCell";

CustomeCellHome *cell = (CustomeCellHome *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomeCellHome" owner:self options:nil];
    for (id currentObject in topLevelObjects){
        if ([currentObject isKindOfClass:[UITableViewCell class]]){
            cell =  (CustomeCellHome *) currentObject;
            break;
        }
    }
}

    NSString *strImgUrl = [[[[myarray valueForKey:@"mykey1"]objectAtIndex:indexPath.row] valueForKey:@"url"] objectAtIndex:0];
    [[AsyncImageLoader sharedLoader] cancelLoadingImagesForTarget:cell.imgView];
    cell.imgView.imageURL = [NSURL URLWithString:strImgUrl];

    cell.lbl1.text = [[myarray valueForKey:@"mykey2"]objectAtIndex:indexPath.row];
    cell.lbl2.text = [[myarray valueForKey:@"mykey3"]objectAtIndex:indexPath.row];

    cell.lbl3.text = [[myarray valueForKey:@"mykey3"]objectAtIndex:indexPath.row];
    cell.lbl4.text = [[myarray valueForKey:@"mykey4"]objectAtIndex:indexPath.row];

    cell.lbl5.text = [[myarray valueForKey:@"mykey5"]objectAtIndex:indexPath.row];
    cell.lbl6.text = [[myarray valueForKey:@"mykey6"]objectAtIndex:indexPath.row];
}

CustomeCellHome は UITableViewCell のサブクラスで、Nib を使用して表示しています。CustomeCellHome にはすべての IBOutlet があり、Nib に接続されています。すべての IBOutlet はプロパティであり、合成され、dealloc メソッドでそれを解放しました。

一度に50件のレコードをテーブルビューに表示しています。ユーザーがさらにレコードを表示したい場合は、次のボタンをクリックしてそれを表示し、前のボタンをクリックして前のレコードを表示することもできます。

ユーザーが次のボタンを押すと、Web サービスが呼び出され、サーバーから次の 50 レコードが取得されます。以前の 50 レコードを配列に保持し、この新しいレコードをその配列に追加しています。しかし、「myarray」では、テーブルビューに表示するために一度に50個しか保持していません(一度に50個のレコードしか表示していないことを意味します)。

850 から 900 またはそのレコードの近くを表示しようとすると、テーブル ビューが引き伸ばされ、しばらくすると停止して表示されます。

また、1450 から 1500 またはそのレコードの近くを表示した後、メモリ警告が表示され、アプリがクラッシュします。私はこれを取得していません。なぜそうなのですか?

メモリツールで確認しましたが、メモリリークはありませんでした。カスタム セルの表示に間違った方法を使用していますか、それとも Web サービス呼び出しによりメモリが増えていますか?

誰でも私を案内してください。前もって感謝します。

4

1 に答える 1

0

メモリを消費しすぎているようです。ウォッチドッグにアプリを撮影させるためにメモリをリークする必要はありません。

より多くのデータをロードするにつれて、アプリのメモリ消費量をプロファイルします。メッセージに応答してmemoryWarning、現在のセットを除くすべてのオブジェクトを削除することをお勧めします。オブジェクトをディスクに(逆)シリアル化して、ユーザーの帯域幅を維持することができます。

オブジェクトの寿命は表示されませんが、オブジェクトがフェッチ/保存されていると仮定すると、または(iOS5とiOS6)にUI(Table)ViewControllerコードを実装して、古いデータを消去する必要があります。- (void)didReceiveMemoryWarning- (void)viewDidUnload

SideNote:myarray実際には辞書ですか?コードを理解しやすくするために、変数にわかりやすい名前を付けることをお勧めします(他の人にとって、そしてバグを修正する必要がある場合は2か月以内に自分自身のために)。

于 2012-11-08T20:14:39.237 に答える