2012-12-14 2 views
-1

나는 _Obj_1, _Obj_2 등 많은 객체를 가지고 있습니다 ...
그리고 나는 모두 공개하고 싶습니다.valueForKeyPath를 사용하여 KVC가 obj를 릴리스 하시겠습니까?

저는 KVC를 사용하고 있습니다. 특히 모두를 해제, 내가 사용

MyClass *obj = nil; 
for (int i=1 ; i<=14; i++) { 
    obj = [self valueForKeyPath:[NSString stringWithFormat:@"_Obj_%d", i]]; 
    [obj release]; 
} 

그 소리 분석기가 호출자에 의해이 시점에서 소유 아닌 객체의 참조 횟수의 [obj release];

잘못된 감소에 대해 말해?

어떻게 해결할 수 있습니까?

이것은 ARC 프로젝트가 아닙니다.

+2

왜 이렇게 열악한 개체를 출시하는 데 사용하고 있습니까? 이것은 정말로 해킹 된 반 패턴이다. –

+0

음, 고마워요. 지금, 의견/응답/부정 투표와 나는 그것이 kvc와 obj를 공개하는 어리석은 방법임을 압니다. 감사. – elp

답변

2

이 아주 쉽게 해결할 수 있습니다

당신이 (당신이 유지 호출하지 않았다) 객체를 소유하지 않은 경우이를 공개하지 않습니다!

동일한 이름의 변수가 많이있는 대신 배열을 사용하여 개체를 보관하십시오. 그런 다음 릴리스는 배열의 릴리스 일뿐입니다.

+0

동의 함. Clang의 경고는 여기에 맞습니다. 이것은'valueForKeyPath :'의 매우 위험한 사용입니다. –