在文本字段中获取内存泄漏

时间:2010-02-04 09:53:43

标签: objective-c

这里我的内存泄漏

eventTextField.keyboardAppearance  = UIKeyboardAppearanceDefault;

我在全局声明了textfield,并在CellForRowAtIndex中分配了文本字段,我的代码是:

if(indexPath.section == 1)
{
    eventTextField = [[UITextField alloc]initWithFrame:CGRectMake(10, 15, 300, 50)];
    eventTextField.placeholder = @"Event Name:";
    [eventTextField setFont:[UIFont boldSystemFontOfSize:14]];
    eventTextField.returnKeyType = UIReturnKeyNext;
    eventTextField.keyboardAppearance  = UIKeyboardAppearanceDefault;
    eventTextField.keyboardType = UIKeyboardTypeDefault;
    eventTextField.delegate=self;
    if(isRightButton == YES)
    {
        eventTextField.enabled = NO;
    }
    else
    {
        eventTextField.enabled = YES;
    }
    if([event.eventName length] > 0)
    {
        eventTextField.text = event.eventName;
    }
    else
    {
        eventTextField.text = @"";
    }
    [elementView addSubview:eventTextField];
    cell.accessoryType = UITableViewCellAccessoryNone;
}

我在dealloc中发布了textfield。 当我检查对象分配时,它显示泄漏: eventTextField.keyboardAppearance = UIKeyboardAppearanceDefault;

伙计们请帮我摆脱这个。 任何人的帮助将不胜感激。

谢谢你, Monish Kumar。

2 个答案:

答案 0 :(得分:0)

我会说这是因为每次调用cellForRowAtIndexPath时,都会将内存分配给eventTextField,而不会先释放之前的内容。

在执行alloc之前检查eventTextField是否为nil。

答案 1 :(得分:0)

只需添加:

[eventTextField release]

后:

[elementView addSubview:eventTextField];

这是有效的,因为addSubview将保留子视图并在视图本身发布时释放它,因此您可以在将文本字段添加到视图后安全地释放它。

黄金法则:只要您拨打分配复制保留,就应该随时拨打发布(或 autorelease )。