2011-10-14 1 views
12

ARC (자동 참조 계산) 및 리팩토링을 내 코드에 적용 할 것인지 평가하고 있습니다. 내가 파악해야하는 일 중 이있다 :ARC 환경에서 UIViewController의 didReceiveMemoryWarning

객체의 명시 적 릴리스 ARC에 의해 허가되어 있지 않은 경우에 나는 didReceiveMemoryWarning에 무엇을해야합니까? 현재, 나는 내 컨트롤러에 속하는 개체를 해제하는 방법을 사용하고 게으른 게터를 통해 쉽게 검색 할 수 있습니다 그 :

- (void)didReceiveMemoryWarning { 
    [_foo release]; _foo = nil; 
    [super didReceiveMemoryWarning]; 
} 

상대 게으른 게터 : "와 같은 구현하는 것은 불가능 보인다

- (Foo *)foo { 
    if (_foo) { 
     return _foo; 
    } 
    return (_foo = [[Foo alloc] init]); 
} 

을 ARC에서 패턴 "을 ... 그래서, 어떻게해야합니까? didReiredMemoryWarning을 ARC에서 "사용되지 않는"/ 쓸모없는 것으로 간주해야합니까?

답변

20

ARC는 보유 및 릴리스 코드를 처리하므로 _foo를 nil로 설정하면 ARC 생성 코드가 릴리스를 수행하는 데 충분합니다. 명시 적으로 해제하지 않으면 개체 그래프를 관리하기 만하면 ARC 생성 코드가 적절한시기에 릴리스를 수행합니다.

자세한 내용은 Apple의 Transitioning To ARC Release Notes 문서를 읽으십시오.

0

여러 가지 작업을 수행 할 수 있지만 모두 앱에 따라 다릅니다. 배열 및 사전을 지우고 객체 참조를 nil (객체를 삭제하는 ARC의 방식)으로 설정하는 것과 같은 것들.