Сохранить счет для tableView: cellForRowAtIndexPath: - PullRequest
0 голосов
/ 11 августа 2010

В примере кода Apple метод tableView:cellForRowAtIndexPath: из UITableViewDataSource возвращает ячейку с счетом сохранения 1;он распределяет его, но не высвобождает его автоматически.Однако статический анализатор жалуется, что это нарушает соглашения об именах Какао, поскольку имя метода не начинается с «new» и т. Д. В документации не упоминается ожидаемое количество сохраняемых ячеек.Какой счет должен иметь клетка?Должен ли я сообщить об ошибке в документации?Спасибо.

РЕДАКТИРОВАТЬ: Пример кода, на который я смотрел, автоматически высвобождает его, и мой взгляд почему-то пропустил его.Извините, что потратил ваше время.Спасибо за ответы.

Дальнейшее редактирование: Вероятно, следует сообщить об ошибке в Clang, если спрашивающие будут вынуждены использовать его терминологию в вопросе.: -)

Ответы [ 5 ]

3 голосов
/ 11 августа 2010

Значение retainCount не очень важно (оно может увеличиваться и уменьшаться по неизвестным причинам). Но ячейки, созданные в tableView:cellForRowAtIndexPath:, должны быть автоматически освобождены. Какой пример кода вы смотрите?

2 голосов
/ 11 августа 2010

Какой пример кода?MyTableViewController.m возвращает либо [tableView dequeueReusableCellWithIdentifier:kCellID], либо [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kCellID] autorelease].

.Почти все методы следуют соглашениям об именах Objective C;те, которые обычно не документированы.

0 голосов
/ 11 августа 2010

Не беспокойтесь о сохранении счета. Вы alloc a UITableViewCell в вашем cellForRowAtIndexPath:, что означает, что вы должны освободить его или у вас есть утечка памяти. Вы не можете освободить его, потому что вы должны вернуть ячейку, сделать так, чтобы табличное представление нарисовало ее как подпредставление, а затем отпустите. Поэтому вы autorelease хотите, чтобы пул авто-релизов выпустил его позже. Когда вы возвращаете его, он еще не был выпущен, но позднее его выпускает система (вы просто отказались от владения им, что вам и нужно, потому что вы не сохраняете ссылку на ячейку после ее возвращения из функции).

0 голосов
/ 11 августа 2010

На самом деле, НЕ ИСПОЛЬЗУЙТЕ retainCount вообще.Я так запутался, и это привело меня в совершенно неправильное русло, и я потратил впустую буквально дни, выискивая неправильные утечки.Это означает, что абсолютно ничего не происходит, если счет идет вверх или вниз!Не тратьте на это ни секунды.

Намного лучше использовать инструменты Leak или Zombie!

(ps также благодаря walkytalky - как я только вижу, он также ответил на это!)

0 голосов
/ 11 августа 2010

Счет удержания равен всегда , по крайней мере, 1. Вы никогда не вернете объект с количеством остатков меньше этого, это уже был бы бывший объект.Пожалуйста, пожалуйста, пожалуйста, не делайте выводов по счетам, не рассчитывайте на них, и даже не смотрите на них.Никогда, никогда, никогда, никогда.

Возможно, тут и там может быть хитрый пример кода, который делает не то, что нужно.Игнорируй это.Делай правильно и не беспокойся об остальном.

...