2010-08-11 3 views
0

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

EDIT: Пример кода, на который я смотрел, делает autorelease, и мой взгляд каким-то образом пропустил его. Жаль тратить свое время. Спасибо за ответы.

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

ответ

3

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

+2

Clang SA использует «keep count of 1» для обозначения «принадлежащих текущему биту стека», то есть '[foo сохранить]' и '[[Foo alloc] init]' имеют счетчики в 1, а '[ [foo сохранить] autorelease] 'и' [[[[Foo alloc] init] autorelease] 'имеют значения сохранения 0. –

+0

@tc. Это, наверное, интересная, но сомнительная терминология. – walkytalky

+0

Правильно, просто используя терминологию Клана. –

2

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

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

0

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

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

0

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

Гораздо лучше использовать инструменты для утечки или зомби!

(пс также благодаря WalkyTalky - как я только вижу, что он также ответил на это!)

0

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