UITableView протекает? - PullRequest
       0

UITableView протекает?

0 голосов
/ 30 ноября 2010

У меня есть UITableViewController, и я установил некоторые свойства в viewDidLoadMethod, например, так:

- (void)viewDidLoad {
    [super viewDidLoad];

    self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self.parentViewController.parentViewController action:@selector(dismissSettings)] autorelease];
    [self setTitle:@"Gabbai Settings"];

    //Set up the table 
    [self.tableView initWithFrame:self.tableView.frame style:UITableViewStyleGrouped];

    [self.tableView setRowHeight:65.0];
    [self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleSingleLineEtched];

    [self.tableView.backgroundView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%@_settings", kTheme] ofType:@"png"]]]];


}

Приложение показывает UIScrollViewController и UIButton. Когда кнопка нажата, приложение отображает модальный UINavigationController, и этот UINavigationController содержит UITableViewController.

По какой-то причине Leaks сообщает о некоторой утечке, когда я показываю UITableViewController. Однако, если я закомментирую четыре строки после //Set up the table, все будет хорошо.

Когда четыре строки не закомментированы, инструмент «Утечки» показывает следующее:

Screenshot of Leaks Instrument

Я не уверен, что здесь происходит, но это действительно раздражает. Я использовал те же четыре строки кода прежде, чтобы настроить свой UITableViewController, и это новое поведение.

Что может быть не так?

Ответы [ 5 ]

2 голосов
/ 30 ноября 2010

Явно освободите tableView в вашем методе dealloc и посмотрите, что произойдет.

Или, что еще лучше, очистите все -> Build and Analyze, расскажите нам, что вы видите

1 голос
/ 30 ноября 2010

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

[self.tableView initWithFrame:self.tableView.frame style:UITableViewStyleGrouped];

Это создаст новый UITableView объект и не изменит self.tableViewчто означает, что линия абсолютно бессмысленна.Это только создает утечку, которую вы испытываете.Удалите его, и все будет в порядке.

1 голос
/ 30 ноября 2010

если self.tableview уже существует, вы не хотите его инициализировать снова. Либо инициализируйте его один раз (что, я полагаю, вы уже сделали, возможно, загружая из пера), а затем, если необходимо, сбросьте кадр здесь.

Или просто разместите / инициируйте просмотр таблицы здесь.

1 голос
/ 30 ноября 2010

Может быть, вы можете попытаться определить uiBarButtonItem как переменную, затем назначить его элементу кнопки левой панели навигации и затем отпустить кнопку

Вы пробовали строить и анализировать в меню "Сборка"? С предложениями 2.0 Objective C это довольно точно

Кроме того, вы должны быть осторожны с определением свойства, вы используете self.tableView, я полагаю, у вас есть что-то вроде @property (nonatomic, retain)? недвижимость на следующей линии ..

Наконец, эта строка очень странная: [self.tableView initWithFrame: self.tableView.frame style: UITableViewStyleGrouped]; Вы пытаетесь инициализировать таблицу, которая уже инициализирована, потому что в противном случае self.tableView.frame должен быть ошибочным. В дополнение к этому, метод initWithFrame возвращает то, что не присваивается. Я думаю, что вы можете придумать лучший способ сделать это

Извините за беспорядок, я отвечал на этот вопрос в чате, но, к сожалению, вы были отключены.

Надеюсь, это поможет.

0 голосов
/ 30 ноября 2010

Похоже, у вас утечка массива или словаря, а не таблицы.

Какой массив вы используете для заполнения таблицы?

Кроме того, вы не хотите [self.tableVIew initWithFrame, попробуйте [self.tableView setFrameCGRectMake(x,y,w,h)];

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...