2013-05-14 4 views
1

나는 나의 interface.h에 나는 그것이의 dealloc에서 해제해야 내가 내 구현이 바르를 사용하지 않는 경우사용하지 않은 ivar를 출시해야합니까?

@porperty(nonatomic, retain) *foo; 

같은 속성을 설정?

+2

예, 당신은해야한다 - 개체 외부 뭔가 어떤 객체에 설정했을 수 있습니다. –

+1

프로젝트에서 ARC를 사용하여 메모리 관리를 개선해야합니다. –

+0

@AhmedZ. 아니, 더 좋지 않아. – justin

답변

2

예 :

- (void)dealloc 
{ 
    // Other release code 
    [_foo release]; 

    [super dealloc]; 
} 

편집 : 감사 dealloc 동안 세터 방지에 관한 팁을위한 @borrrden합니다.

+3

dealloc 메서드 (가능한 KVO 문제)에서 "self"를 사용하지 말고, 뒷받침 변수를 해제 (원할 경우 nil)하는 것이 좋습니다. – borrrden

+0

@borrrden이 권장 사항의 출처를 제공해 주시겠습니까? 제 이해는 당신이 세터에게 당신을 위해 일하게합니다. 즉, 그것은 '자기'를 사용하여 불러내어야한다는 것을 의미합니다. – trojanfoe

+0

@trojanfoe [dealloc에서 self.property = nil을 사용하는 데 문제가 있습니까?] (http://stackoverflow.com/questions/5621139/is-there-any-problem-using-self-property-nil-in-dealloc)), 그냥보세요.(그것도 나를 위해 정보의 새로운 조각) –

-1

예 당신은 이처럼 쓸 수있는 릴리스

을 해제해야합니다 :

- (void)dealloc 
{ 
    // other release stuff 

    if(foo != nil) 
    { 
     [foo release]; 

     foo = nil; 
    } 
    [super dealloc]; 
} 
+3

nil에 대한 테스트는 불필요합니다. 당신은 nil 객체에'release'를 안전하게 보낼 수 있습니다. –

+0

그가 foo (= foo! = nil) 조건을 만족하지 못하면 foo (매달린 포인터)가 어쨌든 해제되어 충돌이 발생합니다. 언급 한 경우 도움이되지 않습니다. –

+0

예, 당신의 권리. 객체가 아직 릴리스되지 않은 경우 릴리스하고 싶습니다. –

관련 문제