2012-01-11 5 views
2

뷰를 지연로드해야하고 예를 들어 예 : 메모리 경고가 발생하거나 다른 이유로 청소하고 싶습니다. 게으른로드를 달성하기 위해 기본 getter를 덮어 썼습니다.UIViewController 하위 클래스의 지연로드

@interface MyController { 
    MyView *_myView; 
} 
@property(nonatomic, retain) MyView *myView; 
@end 

@implementation MyController 
@synthesize myView = _myView; 
- (MyView *)myView { 
    if(_myView == nil) { 
     _myView = [[MyView alloc] init]; 
     // some more initialization 
    } 
    return _myView; 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // the main part of my interest, freeing myView again 
    self.myView = nil; 
} 
@end 

이제 내 질문은 기본적으로 : 여기 내 코드는 여전히 내가 - (void)didReceiveMemoryWarning에서했던 것처럼 myView을 출시 맞거나 심지어 완전히 다른 무언가를 [_myView release]; _myView = nil;에 있거나 것인가?

또한이 방법은 일반적으로 지연 초기화를 사용하는 올바른 방법입니까, 아니면 여기에 일반적으로 개선해야합니까? 나는 기본 UIViewController 행동 이미 착각 느리게보기를로드하고 있지 않다 경우

답변

3

메모리를 해제하기위한 진술은 정확하며 둘 사이에는 차이가 없습니다.

self.myView = nil; 

이 경우 myView 속성의 설정 메소드가 호출되며 아래와 유사한. 게으른 로딩
-(void) setMyView:(MyView*) aMyView { 
    [myView release]; 
    myView = aMyView; 
} 

... 나는보기와 다른 메모리와 관련된 물건을 해제하는 -(void)viewDidDisappear 추측 -(void) loadview 다시

를 다시 작성하기
3

, -loadView에 대한 the documentation를 참조하십시오

당신은이 메소드를 직접 호출해서는 안됩니다. 뷰 컨트롤러는 뷰 속성이 요청되었지만 현재 nil 인 경우 메서드를 호출합니다.

관련 문제