Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iphone sdk中文本字段的内存泄漏_Iphone_Objective C - Fatal编程技术网

iphone sdk中文本字段的内存泄漏

iphone sdk中文本字段的内存泄漏,iphone,objective-c,Iphone,Objective C,我在文本区内存泄漏,请建议我如何解决 我在init中编写的代码如下: eventTextField = nil; eventTextField = [[UITextField alloc]initWithFrame:CGRectMake(10, 15, 300, 50)]; eventTextField.placeholder = @"Event Name"; [eventTextField setFont:[UIFont boldSystemFo

我在文本区内存泄漏,请建议我如何解决

我在init中编写的代码如下:

            eventTextField = nil;
    eventTextField = [[UITextField alloc]initWithFrame:CGRectMake(10, 15, 300, 50)];
    eventTextField.placeholder = @"Event Name";
    [eventTextField setFont:[UIFont boldSystemFontOfSize:14]];
    eventTextField.returnKeyType = UIReturnKeyDone;
    eventTextField.keyboardAppearance  = UIKeyboardAppearanceDefault;//Showing leak at this line
    eventTextField.keyboardType = UIKeyboardTypeDefault;
    eventTextField.delegate=self;
我用dealoc方法发布了它

在cellForRowIndex中,我将其添加为子视图

- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MasterViewIdentifier"];
if (cell == nil) 
{
    cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"MasterViewIdentifier"] autorelease];
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    UIView* elementView =  [[UIView alloc] initWithFrame:CGRectMake(20,170,320,280)];
    elementView.tag = 0;
    elementView.backgroundColor=[UIColor clearColor];
    [cell.contentView addSubview:elementView];
    [elementView release];
}
UIView* elementView  = [cell.contentView viewWithTag:0];
elementView.backgroundColor=[UIColor clearColor];
for(UIView* subView in elementView.subviews)
{
    [subView removeFromSuperview];
}
if(indexPath.section == 0 && indexPath.row == 0)
{
    CorkItAppDelegate* appDelegate = (CorkItAppDelegate*)[[UIApplication sharedApplication] delegate];
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    wineNameTitleLabel.numberOfLines = 0;
    [wineNameTitleLabel setFont:[UIFont boldSystemFontOfSize:14]];

    if(appDelegate.isNewWine == YES)
    {
        wineNameTitleLabel.textColor = [UIColor blackColor] ;
        wineNameTitleLabel.text = appDelegate.getNewWineName;
    }
    else
    {
        if([event.eventWineName length]>0)
        {
            wineNameTitleLabel.textColor = [UIColor blackColor] ;
            wineNameTitleLabel.text = event.eventWineName;
        }
        else
        {
            wineNameTitleLabel.text = @"Wine Name";
        }
    }
        [elementView addSubview:wineNameTitleLabel];
}

else if(indexPath.section == 1)
{

    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;
}
       return cell;
 }
希望我能得到你们的回应。 提前感谢,,
Monish.

将UITextField添加到子视图后,应该释放它

[foo addSubview:eventTextField];
[eventTextField release];

eventTextField=nil;是不必要的,因为如果您仍然需要eventTextField,则ivar指针已设置为0x0nil

。您应该为它创建一个属性和实例变量。因此,您可以让您的类拥有eventTextField并在dealloc中释放它。像这样:

@interface A {
  UITextField *eventTextField;
}

@property (nonatomic, retain) UITextField *eventTextField;

@end

@implementation A
@synthesize eventTextField;

- (id)init {
  eventTextField = [[UITextField alloc]init];
}

- (void)dealloc {
  [eventTextField release];
}
@end

但是我得到了一个异常。我正在使用keyBoardWillShow方法中的textfield和DoneAction中的textfieldDidchange。异常?如果按照我的建议执行,请删除对该对象执行的其他版本。addSubview:保留该对象,因此,如果在创建对象后将其添加为子视图,则可以安全地释放该对象,并且在将其从子视图中删除之前,该对象仍然存在,因此您可以在任何地方使用该对象,以获取发布的代码。他添加了子视图,但过了一段时间他从SuperView中删除了,所以在那个时候,eventTextField变成了gabargedI,尽管它显示内存泄漏。你们方面还有其他建议吗?对不起,我没有清楚地阅读你们的问题。您在dealloc中发布了它,因此此代码没有帮助。是否将eventTextField添加到任何子视图?或者把它移到任何地方?我把代码贴在了我制作子视图的地方。请给我一些其他的建议。嗯,这就为我解释了关于崩溃的一切。您将删除该子视图,但只有在某些情况下,才能将其重新添加。因此,我认为在dealloc中,您只需要按照我以前的建议释放tableView和eventTextField。您拥有eventTextField并最终发布了它,这应该不会有任何问题。我认为要么xcode出错,要么在其他地方泄漏