我有一个班级,我有:
static UiImage *image;
在同一个班级,我有一个方法setImage (UiImage*) imag
{self.image= [[Uiimage alloc]init]; //*
self.image=imag;}
在另一堂课中我有
[myFirstClass setImage: (uiimage)]
这个uiimage存在。
应用程序frezees,它停在(*)。进程中的Houndreds从这条线开始。我也看到了EXC_BAD_ACCESS
由于
答案 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答案以供参考。