나는 나의 interface.h에 나는 그것이의 dealloc에서 해제해야 내가 내 구현이 바르를 사용하지 않는 경우사용하지 않은 ivar를 출시해야합니까?
@porperty(nonatomic, retain) *foo;
같은 속성을 설정?
나는 나의 interface.h에 나는 그것이의 dealloc에서 해제해야 내가 내 구현이 바르를 사용하지 않는 경우사용하지 않은 ivar를 출시해야합니까?
@porperty(nonatomic, retain) *foo;
같은 속성을 설정?
예 :
- (void)dealloc
{
// Other release code
[_foo release];
[super dealloc];
}
편집 : 감사 dealloc
동안 세터 방지에 관한 팁을위한 @borrrden합니다.
dealloc 메서드 (가능한 KVO 문제)에서 "self"를 사용하지 말고, 뒷받침 변수를 해제 (원할 경우 nil)하는 것이 좋습니다. – borrrden
@borrrden이 권장 사항의 출처를 제공해 주시겠습니까? 제 이해는 당신이 세터에게 당신을 위해 일하게합니다. 즉, 그것은 '자기'를 사용하여 불러내어야한다는 것을 의미합니다. – trojanfoe
@trojanfoe [dealloc에서 self.property = nil을 사용하는 데 문제가 있습니까?] (http://stackoverflow.com/questions/5621139/is-there-any-problem-using-self-property-nil-in-dealloc)), 그냥보세요.(그것도 나를 위해 정보의 새로운 조각) –
예 당신은 이처럼 쓸 수있는 릴리스
을 해제해야합니다 :
- (void)dealloc
{
// other release stuff
if(foo != nil)
{
[foo release];
foo = nil;
}
[super dealloc];
}
nil에 대한 테스트는 불필요합니다. 당신은 nil 객체에'release'를 안전하게 보낼 수 있습니다. –
그가 foo (= foo! = nil) 조건을 만족하지 못하면 foo (매달린 포인터)가 어쨌든 해제되어 충돌이 발생합니다. 언급 한 경우 도움이되지 않습니다. –
예, 당신의 권리. 객체가 아직 릴리스되지 않은 경우 릴리스하고 싶습니다. –
예, 당신은해야한다 - 개체 외부 뭔가 어떤 객체에 설정했을 수 있습니다. –
프로젝트에서 ARC를 사용하여 메모리 관리를 개선해야합니다. –
@AhmedZ. 아니, 더 좋지 않아. – justin