Uiimage错误的初始化和EXC_BAD_ACCESS

时间:2012-01-31 13:17:36

标签: objective-c ios

我有一个班级,我有:

static UiImage *image;

在同一个班级,我有一个方法setImage (UiImage*) imag

{self.image= [[Uiimage alloc]init]; //*
self.image=imag;}

在另一堂课中我有

[myFirstClass setImage: (uiimage)]

这个uiimage存在。

应用程序frezees,它停在(*)。进程中的Houndreds从这条线开始。我也看到了EXC_BAD_ACCESS

由于

3 个答案:

答案 0 :(得分:3)

如果你有一个属性image,那么你将通过从setter调用你的setter进入无限循环。

答案 1 :(得分:1)

请改用以下内容......

- (void)setImage (UiImage*)anImage {
  [image release];
  image = [anImage retain];
}

答案 2 :(得分:1)

您已声明图片

static UiImage *image;

这是因为您希望将其初始化一次,然后将其引用 - 作为常量吗?如果是这样,一个好方法是覆盖图像的getter访问器方法。

// foo.h
class foo {
    UIImage* image_;
}

@property (nonatomic, retain) UIImage* image;

// foo.m
@synthesize image = image_;

-(UIImage*)image {
    if (image_ == nil) {
        //set the image here
        image_ = [[UIImage alloc] init];    
    }
    return image_
}

然后在客户端代码中,第一次引用foo.image时,它将被实例化。你引用它的第二次和每次都会有一个值。

// elsewhere in foo.m

UIImageView* fooImageView = [[UIImageView alloc] initWithImage:self.image];

// bar.m

UIImageView* barImageView = [[UIImageView alloc] initWithImage:foo.image];

请参阅此SO答案以供参考。