自定义UITableViewCell崩溃[super dealloc]

时间:2012-05-20 14:16:35

标签: iphone objective-c ios memory-management uitableview

我有一个UITableViewCell的子类,当它击中[super dealloc]行时会崩溃。我的单元格中有几个textFields,错误消息是*** -[UITextField release]: message sent to deallocated instance 0x739dfd0

下面是相关的代码片段(我确实有其他textFields,但它们都是以同样的方式处理。我怀疑它是将它添加到单元格的contentView。但我不知道如何纠正它

Custom UITableViewCell的

.h文件:

@interface ExerciseTableViewCell : UITableViewCell {

    UITextField *textField1;

}

@property (nonatomic, retain) UITextField *textField1;

@end

.m文件:

@implementation ExerciseTableViewCell

@synthesize textField1;

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // Initialization code

    UIView *myContentView = self.contentView;

        UITextField *newTextField1 = [[UITextField alloc] init];

        self.textField1 = newTextField1;

        [newTextField1 release];

        [myContentView addSubview:textField1];

    }
    return self;
}


}

- (void)dealloc {
    [textField1 release];
    [super dealloc];
}

我不明白为什么我会多次发布textField?

3 个答案:

答案 0 :(得分:2)

变化:

UITextField *newTextField1 = [[UITextField alloc] init];

self.textField1 = newTextField1;

[newTextField1 release];

[myContentView addSubview:textField1];

为:

self.textField1 = [[[UITextField alloc] init] autorelease];
[myContextView addSubview:self.textField1];

答案 1 :(得分:1)

需要在本地声明文本字段并将其分配给全局声明的文本字段,只需使用

textField1 = [[UITextField alloc] init]; 
[myContentView addSubview:textField1];

答案 2 :(得分:0)

将textfield对象设置为nil而不是释放它。其次,请在编码时使用适当的命名约定。