2014-07-07 2 views
1

이미지를 늦게 초기화하는 데 문제가 있습니다. 내보기 컨트롤러에서 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 개체가 만들어지고 응용 프로그램이 다운됩니다.

답변

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를 호출 할 수 있지만 가능한 문제가 발생하지 않도록하는 것이 좋습니다.

+0

대단히 감사합니다. –

관련 문제