这里我的内存泄漏
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。
答案 0 :(得分:0)
我会说这是因为每次调用cellForRowAtIndexPath时,都会将内存分配给eventTextField,而不会先释放之前的内容。
在执行alloc之前检查eventTextField是否为nil。
答案 1 :(得分:0)
只需添加:
[eventTextField release]
后:
[elementView addSubview:eventTextField];
这是有效的,因为addSubview将保留子视图并在视图本身发布时释放它,因此您可以在将文本字段添加到视图后安全地释放它。
黄金法则:只要您拨打分配或复制或保留,就应该随时拨打发布(或 autorelease )。