2012-12-14 67 views
-1

我有很多對象名爲_Obj_1,_Obj_2等...
我想發佈所有。KVC使用valueForKeyPath發佈objs?

我正在使用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

你爲什麼用這個來釋放那個可憐的東西?這確實是一個駭人的反模式。 – 2012-12-14 14:34:15

+0

很好,謝謝。現在,評論/迴應/反對票我知道這是一個愚蠢的方式釋放obj與kvc。謝謝。 – elp

回答

2

這個問題可以很容易

如果你沒有自己的對象(你沒叫保留),不釋放它!

使用一個數組來保存對象,而不是使用大量具有相同名稱的變量。然後釋放將只是一個數組的釋放。

+0

同意。克朗的警告在這裏是正確的。這是'valueForKeyPath:'的一個非常危險的用法。 –