当我输入UITextfield时,内存会急剧增加

时间:2011-06-28 10:50:03

标签: iphone objective-c memory-management uitextfield

这是我在tableview中创建两个文本字段的方法,然后在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 个答案:

答案 0 :(得分:2)

您的代码有几个问题。您正在向单元格添加新的UITextFields,即使在重复使用时也是如此,因此您可以反复向同一单元格添加新的文本字段。您需要为<{em> if (cell == nil)部分中的不同类型的单元格构建不同的设置逻辑,并且稍后才配置这些单元格。此外,您可能希望在将文本字段添加为子视图后释放它们。请参阅Apple文档中有关UITableView

的示例

您可能希望显示您的委托方法 - 可能还有一些问题。

答案 1 :(得分:1)

试试这个

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

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

答案 2 :(得分:0)

您没有发布文字字段

答案 3 :(得分:0)

您是否使用Instruments检测内存分配?我注意到了同样的问题。当键盘出现时,内存使用率就会上升......我认为这是你不必担心的事情。我没有做任何事情来解决这个问题,当键盘出现时,它几乎发生在每个实例中。可能是仪器的一个错误?