UIViewController에서 undestand 몇 가지 메소드를 사용하는 데 어려움을 겪고 있습니다. 그러나 먼저 인터페이스 템플릿을 사용하지 않으므로 인터페이스 빌더를 무시한다고 생각합니다.iPhone dev-viewDidUnload subviews
-init
: 메모리 부족 상황 (즉, 쉽게 다시 생성 할 수없는 객체 또는 객체가 아닌)에서 해제 할 필요가없는 비 관측 관련 항목을 초기화합니다.
-loadView
:보기를 만들려면 [self view]
속성을 설정하십시오.
-viewDidLoad
: 다른 모든 뷰 요소를 만듭니다.
-viewDidUnload
: 릴리스 개체는 -viewDidLoad
에서 생성됩니다.
didReceiveMemoryWarning
: 메모리 부족 상황, 캐시 된 데이터와 같은 불필요한 것들을 릴리스합니다.이보기에 수퍼 뷰가없는 경우 [super didReceiveMemoryWarning]
은보기를 해제 (언로드)하고 -viewDidUnload
을 호출합니다.
-dealloc
: 모두에게 공개
-viewWillAppear:
, -viewDidAppear:
, -viewWillDisappear:
, -viewDidDisappear:
자명, 당신이 그 이벤트 (무언가를) 응답하지 않으려면 필요는 없습니다.
몇 가지 사항에 대해서는 잘 모르겠습니다. 첫째, Apple의 문서에 따르면 -viewDidUnload
이 호출되면보기가 이미 해제되고 nil로 설정됩니다.
-loadView
나중에 다시보기가 다시 생성됩니까?-viewDidLoad
에서 내가 만든 ivar/속성을 만들지 않은 이유는 필요가 없기 때문이며보기에 유지되기 때문입니다 (하위보기이기 때문에). 따라서보기가 해제 될 때도 해제됩니다. 보기가 해제되면 모든 하위보기가 해제됩니까?-viewDidLoad
에서 만든 모든 객체가[self view]
의 하위 뷰이기 때문입니다. 따라서 이미 출시 된 경우-viewDidUnload
에 다시 게시해야하는 이유는 무엇입니까? 이러한 방법으로 뷰를로드하고 언로드 할 때 필요한 데이터를 이해할 수 있지만 요청한 것처럼 하위 뷰가 이미 해제 된 이유는 무엇입니까?
편집는 : 다른 질문을 읽은 후, 나는 그것을 (내 두번째 질문)을 가지고 있다고 생각. 내가 로컬 변수를 사용하고, alloc하고, subview와 release하게하는 상황에서, retain count가 1이 될 것이다. (서브 뷰로 추가하는 것에서부터) 뷰가 릴리즈 될 때도 그렇다. 이제 ivars가 가리키는 뷰 요소에 대해 외부 클래스가 액세스 할 필요가 없으므로 속성을 사용하지 않았습니다. 하지만 지금은 그 때문에이 상황에서, 잘못 생각하십시오 바르가 유지되지 않았기 때문에이 없었기 때문에 그것이 (할당 해제 된 후 그 상황에서
// MyViewController.h
@interface MyViewController : UIViewController {
UILabel *myLabel;
}
// MyViewController.m
. . .
- (void)viewDidLoad {
myLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 40, 10)];
[myLabel setText:@"Foobar"];
[[self view] addSubview:myLabel];
}
- (void)viewDidUnload [
// equivalent of [self setMyLabel:nil]; without properties
[myLabel release];
myLabel = nil;
}
, 레이블이 -release
메시지가 전송됩니다 재산). 그러나 재산으로 보유 수는 2 일 것입니다 : 그것 및 재산을 보유하는 전망. 그러면 -viewDidUnload
에서 할당이 해제됩니다. 그래서 항상 이런 것들에 대한 속성을 사용하는 것이 가장 좋습니다. 맞습니까? 안 그래요?
감사합니다. 지금은 이해합니다. 하지만 내가 편집 한 내 게시물의 마지막 부분 인 속성을 사용하는 것이 맞습니까? – mk12
'-viewDidUnload'는'-viewDidLoad'에서 다시 생성 할 데이터를 언로드하는 것 외에도'-viewDidUnload'의 하위 뷰를 유지하는 속성 ('[self setProperty : nil]')을 해제하기위한 것입니다. [self view]'는 이미 풀어 놓았으므로 할당 취소 될 수 있습니다. 내가 맞습니까? – mk12
그러나 나는 그 코드가 작동하지 않는다고 생각했습니다. 멤버 변수 myLabel은 결코 UILabel을 유지하지 않으므로 (보기 만), 여전히'-viewDidUnload'에서 해제합니다. 아니면 제가 설명했던 것에 대해 이야기하고 있었습니까? 내가 결정하려고하는 것은이 속성 (멤버 변수가 필요한 곳)에 항상 속성을 사용해야한다는 것입니다. – mk12