私はテストするためにコードを単純化しましたが、まだ電話で私のメモリ使用量は、テーブルが遅くなるポイントまで上昇し続けます。なぜ表セルが解放されないのですか?
誰かが私がここで間違っていることを教えてもらえますか?
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 40;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 100;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *cellID = @"Cell";
[self.tableView deselectRowAtIndexPath:indexPath animated:YES];
UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellID];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:cellID] autorelease];
}
UILabel *l=[[UILabel alloc] initWithFrame:CGRectMake(10,10,300,16)];
l.font=[UIFont boldSystemFontOfSize:15];
l.textColor=[UIColor whiteColor];
l.backgroundColor=[UIColor blackColor];
[email protected]"Just some randoom text here";
[cell.contentView addSubview:l];
[l release];
おっと。そのコードペーストはあまりうまく動かなかった。ここではストレートペーストです:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 40;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 100;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *cellID = @"Cell";
[self.tableView deselectRowAtIndexPath:indexPath animated:YES];
UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellID];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:cellID] autorelease];
}
UILabel *l=[[UILabel alloc] initWithFrame:CGRectMake(10,10,300,16)];
l.font=[UIFont boldSystemFontOfSize:15];
l.textColor=[UIColor whiteColor];
l.backgroundColor=[UIColor blackColor];
[email protected]"Just some randoom text here";
[cell.contentView addSubview:l];
[l release];
return cell;
}
このソリューションでは、残念なことにメモリペグも(ストレートコピー&ペースト)。 おそらく、それはテーブルビューが配置される方法です。 IBでタブバーコントローラを作成し、IBのビューコントローラも割り当てます。 autoreleasepoolは決して解放する機会を得ないでしょうか?何が良い方法だろうか? NSAutoreleasePoolをmain以外の場所に置いて、これを解放する必要がありますか?その場合、ビュー自体がタブバー位置にあるということはどこから解放されないのでしょうか? –
これが何かを意味するかどうかは分かりませんが、Simulatorではメモリが適切に解放されます。 –
すべてのUIイベントの後にプールが排水されます。 *正確に*はリリースされていませんか?つまり、いつメモリがなくなるのでしょうか?長いアイテムのリストをスクロールしてから、あなたのViewControllerから戻ってきますか?あなたはどこか他の場所に漏れがあります。 – Jason