2009-11-23 6 views
0

나는 순서가 계층 구조에서 순서의 역순 반영해야 객체의 석방을 표현하면 그냥 궁금 : 나는 그것을해야한다 (나에게 의미가) 확신Objective-C/Cocoa 제작 릴리즈 주문?

// Psuedo code 
alloc OBJ_001; 
alloc OBJ_001 > OBJ_002; 
alloc OBJ_001 > OBJ_002 > NSSting; 

release NSString; 
release OBJ_002; 
release OBJ_001; 

,하지만 보지 못했다 지금까지 내 학습에서 이것에 대한 언급.

게리

답변

1

중요하지 않습니다. 나는 OBJ_001OBJ_002의 소유이고 NSString 인스턴스를 소유하고 있으며 OBJ_002과 NSString을 공동 소유하고 OBJ_002OBJ_001을 공동 소유 함을 의미한다고 가정합니다.

은 역순으로 수행 :

  1. 릴리스는 NSString 인스턴스 : 아무런 반응이 없습니다, OBJ_002 여전히 그것을 소유하고 있기 때문이다.
  2. 출시 OBJ_002 : OBJ_001이 여전히 소유하고 있기 때문에 아무런 변화가 없습니다.
  3. 릴리스 OBJ_001 : NSString을 해제하는 OBJ_002을 출시합니다. 세 가지 모두 dealloc.

같은 순서로 그 일 :

  1. 출시 OBJ_001 : 그것은 OBJ_002 출시 후 deallocks. OBJ_002은 여전히 ​​소유하고 있기 때문에 계속 존재합니다.
  2. 릴리스 OBJ_002 : NSString을 해제하고 해제합니다. 여전히 NSString을 소유하고 있기 때문에 NSString은 여전히 ​​존재합니다.
  3. NSString 인스턴스를 릴리스하십시오. deallocks.

어느 쪽이든, 세 가지 인스턴스 모두 dealloc. 다른 점이 없다.

나는 역순을 선호하지만 이는 순전히 스타일 선택입니다.

+0

-dealloc 메소드에서 순서 종속성이있는 경우 하나입니다. 간단히 말해, -dealloc에 ​​순서 의존성을 가지지 마십시오! 행동 양식. 또는 GC를 켜고 Mac OS X을 대상으로하는 경우이를 수행하십시오. – bbum

0

당신이 원하는 때마다 당신이 그것을 해제 할 수 있습니다 그것을 사용을 완료 나는만큼, 그래서 언급하지 않았다.