self.tableView
является свойством retain
, поэтому ваш синтезированный сеттер увеличивает количество сохраняемых данных.Но когда вы создаете новый UITableView
, используя alloc
/ init
, вы также увеличиваете количество сохраняемых данных.Таким образом, эта строка приводит к тому, что tableView
сохраняется дважды:
self.tableView = [[UITableView alloc]
initWithFrame:CGRectMake(0, 0, 320, 300)
style:UITableViewStyleGrouped];
Один раз, когда вы используете alloc
/ init
, и один раз, когда вы вызываете синтезированный сеттер, используя self.tableView =
.
У вас нет двух соответствующих release
вызовов.
Надлежащим способом обработки этого будет autorelease
alloc
/ init
d для объекта UITableView, для которого для self.tableView
установлено значениеПримерно так:
self.tableView = [[[UITableView alloc]
initWithFrame:CGRectMake(0, 0, 320, 300)
style:UITableViewStyleGrouped]
autorelease];
Остальная часть вашего кода будет работать, как и ожидалось.
Кроме того, вы, вероятно, не хотите создавать UITableView
в viewDidAppear
.К тому времени ваше мнение уже появилось (отсюда и название), и вы, вероятно, захотели свой UITableView
до этого.Вы также, вероятно, не хотите, чтобы ЦП затрачивал на создание нового UITableView
каждый раз, когда появляется представление.Возможно, вы захотите создать UITableView
в viewDidLoad
и затем использовать его повторно, если только для этого нет веской причины.