---- MyEventSelectorCell.h
@interface MyEventSelectorCell : UITableViewCell {
IBOutlet UIImageView* eventImage;
}
@property(nonatomic, retain) IBOutlet UIImageView* anImage;
----- MyEventSelectorCell.m
-(id) dealloc {
[anImage release];// < -- If I comment this out, It starts leaking, but program runs fine...
}
---- MyTableViewController.h
@MyTableViewController: UIViewController<UITableViewDelegate> {
IBOutlet MyEventSelectorCell* tmpCell;
}
@property(nonatomic, retain) IBOutlet MyEventSelectorCell* tmpCell;
---- MyTableViewController.m
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
...
[[NSBundle mainBundle] loadNibNamed:@"MyEventSelectorCell" owner:self options:nil];
tmpCell.anImage.image = [UIImage imageNamed: @"someimage.png"];
...
}
EXC_BAD_ACCESS在我将UIImageView .image属性设置为上面的imageNamed后释放anImage后发生...
答案 0 :(得分:3)
[UIImage imagedNamed:...]返回一个自动释放对象。所以,如果你也发布了,你必须明确地保留:
tmpCell.anImage.image = [[UIImage imageNamed: @"someimage.png"] retain];
希望能帮到你。欢呼声。
答案 1 :(得分:1)
R31n4ld0在技术上是正确的,但由于UIImageView保留了它的图像,所以你不应该自己明确地保留它。
您的问题可能正在发生,因为您正在发布由具有“retain”属性的属性保留的视图。合成的“retain”属性包括在setter中释放和保留的隐式调用,因此dealloc中的通常模式是将它们分配为nil而不是在属性本身上调用release。这可以防止在重新分配属性时发生冗余释放调用。