我在懒惰地初始化图像时遇到问题。在我的视图控制器中,我试图说明是否未从URL检索图像,然后加载它。
- (UIImage *)image {
if (!self.image) {
self.image = [[UIImage alloc] init];
... get image data from url ...
self.image = [UIImage imageWithData:urldata];
}
return self.image;
}
任何建议都会非常感激,它会创建大量的UIImage对象并使应用程序崩溃。
答案 0 :(得分:4)
您正在进行递归通话。切勿在属性的getter或setter方法中访问该属性。
你想:
- (UIImage *)image {
if (!_image) {
_image = [[UIImage alloc] init];
... get image data from url ...
_image = [UIImage imageWithData:urldata];
}
return _image;
}
对self.image
的调用会调用此image
方法。因此,如果您在self.image
方法中调用image
,则会以递归方式调用自身。
实际上你可以从getter调用setter,你可以从setter调用getter但是我更愿意保持一致以避免任何可能的问题。