UIImageView EXC_BAD_ACCESS

时间:2010-03-07 23:27:02

标签: iphone

---- 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后发生...

2 个答案:

答案 0 :(得分:3)

[UIImage imagedNamed:...]返回一个自动释放对象。所以,如果你也发布了,你必须明确地保留:

tmpCell.anImage.image = [[UIImage imageNamed: @"someimage.png"] retain];

希望能帮到你。欢呼声。

答案 1 :(得分:1)

R31n4ld0在技术上是正确的,但由于UIImageView保留了它的图像,所以你不应该自己明确地保留它。

您的问题可能正在发生,因为您正在发布由具有“retain”属性的属性保留的视图。合成的“retain”属性包括在setter中释放和保留的隐式调用,因此dealloc中的通常模式是将它们分配为nil而不是在属性本身上调用release。这可以防止在重新分配属性时发生冗余释放调用。