Привет всем У меня есть UITableView со списком элементов, полученных из sqllite. Но при визуализации зрения возникает утечка памяти. Ниже приведен мой метод cellForRowAtIndexPath.Проблема с утечкой памяти UITableView
static NSString *CellIdentifier = @"BarListItemCell";
BarListItemViewCell *cell = (BarListItemViewCell *)[tableView
dequeueReusableCellWithIdentifier: CellIdentifier];
if (cell == nil) {
NSArray * nib = [[NSBundle mainBundle] loadNibNamed:@"BarListItemViewCell" owner:self options:nil];
for (id cellObject in nib) {
if ([cellObject isKindOfClass : [BarListItemViewCell class]]) {
cell = (BarListItemViewCell *) cellObject;
//break;
}
}
NSString * key = [keys objectAtIndex:[indexPath section]];
NSDictionary * unit = [[barListDataSource objectForKey:key] objectAtIndex:[indexPath row]];
NSLog(@"unit count is %d", [unit retainCount]);
cell.name.text = [unit objectForKey:@"name"];
cell.address.text = [unit objectForKey:@"address1"];
cell.features.text = [unit objectForKey:@"features"];
cell.logo.image = [UIImage imageWithData:[unit objectForKey:@"logo"]];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
//cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
return cell;
Вы можете увидеть линию "NSLog (@" подсчет единиц составляет% d "[единица retainCount]);". Очень странно, что после viewDidLoad консоль отображает 3 строки «количество единиц измерения равно 2» (у меня есть 3 элемента на весь экран). Но когда я перетаскиваю экран, чтобы UITableView показывал следующий элемент, на консоли отображается «количество единиц 1». Когда вызывается метод [tableView reloadData], консоль отображает также «количество единиц измерения равно 1». Поэтому кажется, что UITableView автоматически выпустит источник данных. Вот почему я подсчитываю количество ссылок на память, равное 2, в противном случае произойдет высвобождение. Но стоимость в том, что память, занятая единицей, никогда не будет освобождена!
Спасибо за ваш ответ, я сначала прочитаю руководства по управлению памятью. Но ситуация в том, что я всегда должен взять на себя ответственность за источник данных UITableView, что означает, что я не могу отправить метод авторекламы в источник данных. Но перед вызовом [tableView reloadData] я назначу ссылку источника данных на новый список/словарь. Это значит, что я должен сначала выпустить предыдущий источник данных вручную? – Shenjun