因此,经过大量老式的评论调试后,缩小了仪器的泄漏范围。当我将一个新的TableViewController推入堆栈时会发生泄漏。
我发现我从这段代码中泄漏:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell;
cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
}
if(![feedData isFinishedLoading]){
[[cell textLabel] setText:@"Loading..."];
[[cell detailTextLabel] setText:@"..."];
}
else{
NSDictionary *dict = [[feedData items] objectAtIndex:indexPath.row];
[[cell textLabel] setText:[dict valueForKey:@"title"]];
[[cell detailTextLabel] setText:[dict valueForKey:@"description"]];
[cell setAccessoryType:UITableViewCellAccessoryDetailDisclosureButton];
}
return cell;
}
此版本不会泄漏:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell;
cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
}
// if(![feedData isFinishedLoading]){
// [[cell textLabel] setText:@"Loading..."];
// [[cell detailTextLabel] setText:@"..."];
// }
// else{
// NSDictionary *dict = [[feedData items] objectAtIndex:indexPath.row];
// [[cell textLabel] setText:[dict valueForKey:@"title"]];
// [[cell detailTextLabel] setText:[dict valueForKey:@"description"]];
// [cell setAccessoryType:UITableViewCellAccessoryDetailDisclosureButton];
// }
return cell;
}
这个版本确实:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell;
cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
}
// if(![feedData isFinishedLoading]){
[[cell textLabel] setText:@"Loading..."];
[[cell detailTextLabel] setText:@"..."];
// }
// else{
// NSDictionary *dict = [[feedData items] objectAtIndex:indexPath.row];
// [[cell textLabel] setText:[dict valueForKey:@"title"]];
// [[cell detailTextLabel] setText:[dict valueForKey:@"description"]];
// [cell setAccessoryType:UITableViewCellAccessoryDetailDisclosureButton];
// }
return cell;
}
这是乐器的屏幕上限:
我的代码中的问题出在哪里?或者它是框架/模拟器中的错误?
答案 0 :(得分:0)
泄漏堆栈中没有任何东西可以调用您的代码,因此我不知道您是否可以删除它。我知道一个大红色尖峰是可怕的,但它只有16个字节。 Apple并不完美,也许代码中的某些东西正在做。也许您可以尝试使用点访问器来查看是否有帮助
cell.textLabel.text = @"Loading...";
cell.detailTextLabel.ext = @"...";