0

我已经为 TableView 创建了一个自定义 TableViewCell,但是如果有一个 dealloc 方法(在自定义单元类中),应用程序就会崩溃。请参阅以下用于表格单元类的代码:

#import <UIKit/UIKit.h>

@interface CustomTableCell : UITableViewCell {

    UILabel *nameLabel_;
    UILabel *dateLabel_;

}

@property (nonatomic, retain) IBOutlet UILabel *nameLabel;
@property (nonatomic, retain) IBOutlet UILabel *dateLabel;

@end


#import "CustomTableCell.h"

@implementation CustomTableCell

@synthesize nameLabel = nameLabel_;
@synthesize dateLabel = dateLabel_;


- (void) dealloc {

    [self.nameLabel release];
    self.nameLabel = nil;
    [self.dateLabel release];
    self.dateLabel = nil;

    [super dealloc];
}

@end

创建自定义单元格的代码(cellForRowAtIndexPath):

UITableViewCell *Cell = [tableView dequeueReusableCellWithIdentifier:@"DemoCell"];

if (Cell == nil){

    NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomTableCell" owner:nil options:nil];

    for(id currentObject in topLevelObjects)
    {
        if([currentObject isKindOfClass:[CustomTableCell class]])
        {
            Cell = (CustomTableCell *)currentObject;
            break;
        }
    }
}

如果我从自定义单元格中删除 dealloc 方法,一切正常。否则我会得到一个异常(当我滚动表格视图时):-[CALayer release]: 消息发送到释放实例 0x6fbc590 *

我们不需要customTableViewCell 中的dealloc 方法吗?请帮助我找到解决此问题的方法。

4

1 回答 1

1

从表面上看,您正在-dealloc错误地编写方法。这样做:

- (void) dealloc {

    [nameLabel_ release];
    nameLabel_ = nil;
    [dateLabel_ release];
    dateLabel_ = nil;

    [super dealloc];
}

你不应该在你的-dealloc方法中使用你的访问器;直接使用您的 ivars。

于 2012-12-06T01:18:19.683 回答