Память резко увеличивается, когда я печатаю в поле UIText - PullRequest
0 голосов
/ 28 июня 2011

Так я создал два текстовых поля в табличном представлении, и я освобождаю их в методе dealloc.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *MyIdentifier = @"MyIdentifier";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
    if (cell == nil) 
    {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier] autorelease];
    }

    cell.accessoryType = UITableViewCellAccessoryNone;

    if ([indexPath row] == 0) {
        text = [[UITextField alloc] initWithFrame:CGRectMake(5, 5, 300, 30)];
        text.delegate=self;
        text.userInteractionEnabled=NO;
        text.contentVerticalAlignment=UIControlContentVerticalAlignmentCenter;
        if ( qNum-1 == 53 ) {
            text.placeholder=@"Category";
        }
        [cell.contentView addSubview:text];
    }
    if ([indexPath row] == 1) {
        text2 = [[UITextField alloc] initWithFrame:CGRectMake(5, 5, 300, 30)];
        text2.delegate=self;
        text2.userInteractionEnabled=NO;
        if(qNum-1==53) {
            text2.placeholder=@"Subcategory";
        }
        text2.contentVerticalAlignment=UIControlContentVerticalAlignmentCenter;
        [cell.contentView addSubview:text2];
    }

    cell.selectionStyle = UITableViewCellSelectionStyleNone;

    return cell;
}

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

Вот код, который я написал внутри методов делегата

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
return YES;

}

- (void)textFieldDidBeginEditing:(UITextField *)textField{

if([text.text isEqualToString:@"United States"]||[text.text isEqualToString:@"Australia"]){
    text2.userInteractionEnabled=NO;
    item.title=@"State";
    myPickerView.hidden=YES;
    myPickerView2.hidden=NO;
    [actionSheet showInView:mainView];
    [actionSheet setBounds:CGRectMake(0, 0, 320, 400)];
}

}

Ответы [ 4 ]

2 голосов
/ 28 июня 2011

Ваш код имеет несколько проблем.Вы добавляете новый UITextFields в свою ячейку, даже когда используете его повторно, поэтому вы снова и снова добавляете новые текстовые поля в одну и ту же ячейку.Вам необходимо создать отдельную логику настройки для различных типов ячеек в части if (cell == nil) и настроить эти ячейки только позже.Кроме того, вы, вероятно, хотите освободить текстовые поля после добавления их в качестве подпредставления.Пожалуйста, обратитесь к примерам в документации Apple для UITableView.

Возможно, вы захотите показать свои методы делегата - возможно, есть еще некоторые проблемы.

1 голос
/ 28 июня 2011

попробуйте

[cell.contentView addSubview:text];   
[text release];

и

[cell.contentView addSubview:text2];
[text2 release];
0 голосов
/ 29 июля 2011

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

0 голосов
/ 28 июня 2011

Вы не освобождаете текстовые поля

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