2011-03-30 1 views
1

"viewDidUnload"의 개체를 제외하고 Apple의 권장 사항에 대한 정보를 Core Data 튜토리얼에서 찾아 볼 수 있습니다. 예 :"viewDidUnload"에있는 객체를 없애라는 Apple의 조언에 대한 설명?

  • 이것이 중요한 이유는 무엇입니까? nil'ing을 릴리스하는 것과 다른가요?
  • 이 최선의 방법입니다./내가 본 적이 없으며 이것을 보지도 못했지만 일부 iPhone 예제 코드에서 보았을 것으로 생각하지 않습니다.

코드 :

// The implementation of viewDidUnload should relinquish ownership 
// of anything created in viewDidLoad that can be recreated. 

- (void)viewDidUnload { 
    self.eventsArray = nil; 
    self.locationManager = nil; 
    self.addButton = nil; 
} 

- (void)dealloc { 
    [managedObjectContext release]; 
    [eventsArray release]; 
    [locationManager release]; 
    [addButton release]; 
    [super dealloc]; 
} 
+0

[가능한 경우 - (void) viewDidUnload - -dealloc 아닌 개체를 해제해야합니까?] (http://stackoverflow.com/questions/1158788/when-should-i-release-objects-in- voidviewdidload보다는 오히려 dealloc) – Mark

답변

5

뿐만 아니라 그들을 출시 할 예정 nil에 대한 속성을 설정 (이것은 무엇을해야으로 setter 메소드 가정은 이전 값을 해제).

또한 특성을 nil으로 설정하면 나중에 메시지가 전송 될 수있는 모든 메시지가 nil에 의해 삼켜지고 무시됩니다. 단순히 풀어 놓은 상황에서는 객체가 메모리에서 할당 해제되고 덮어 쓰기 될 수 있지만 여전히 메시지를 그들에게 보내어 (메모리에 덮어 쓴 것이 무엇이든지간에) 메시지를 보낼 수 있습니다. 이로 인해 충돌, 예외 또는 다른 원인이 발생할 가능성이 있습니다 예기치 않은 행동.

+0

감사합니다. Mike - 우리는 항상 변수를 해제 한 다음에 (즉, 직전에) 설정해야 함을 의미하지 않을까요? 나는 내가 리뷰 한 예제 코드에서 이것이 사실 인 것을 눈치 채지 못했다. (나는 여전히 iPhone 개발자에게 익숙하지 않다.) – Greg

+0

예, 클래스 변수라면 그렇다. 그러나 메소드와 같은 일부 로컬 범위에만 존재하는 변수에 대해서는이를 수행 할 필요가 없습니다. 객체가 어쨌든 파괴 될 때 dealloc에서도 필요하지 않습니다. 이 두 경우 사이에는 변수가 해제되고 다른 변수로 설정되지 않은 변수가 많이 남아 있지 않습니다. – Lauren

0

메모리 부족 상황에서 viewDidUnload 메서드가 호출됩니다. 메모리가 부족한 상황에서 xib는 앱에서 메모리를 확보하기 위해 메모리에서 해제됩니다. 하지만 앱에서 코코아 오브 개체를 여전히 보유하고 있다면 충분히 효과적이지 않습니다. 따라서 우리는 nib 객체를 viewDidUnload에서 nil로 설정하면 더 많은 메모리를 확보 할 수있게되었습니다.