У меня много объектов с именами _Obj_1, _Obj_2 и т. Д.
И я хочу выпустить все.

Я использую KVC. В частности, чтобы выпустить все, я использую:

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

Анализатор clang скажет мне для [obj release];

Неправильное уменьшение счетчика ссылок объекта, который на данный момент не принадлежит вызывающей стороне?

Как я могу это исправить?

Это не проект ARC.

-1
elp 14 Дек 2012 в 18:31
2
Почему вы используете это для освобождения того плохого объекта? Это действительно хакерский антипаттерн.
 – 
user529758
14 Дек 2012 в 18:34
Ну, что ж, спасибо. Теперь, с комментариями / ответом / отрицательным голосом, я знаю, что это глупый способ выпустить obj с помощью kvc. Спасибо.
 – 
elp
14 Дек 2012 в 18:46

1 ответ

Лучший ответ

Это очень легко исправить

Если объект не принадлежит вам (вы не называли его "сохранить"), не отпускайте его!

Вместо множества переменных с одинаковыми именами используйте массив для хранения объектов. Тогда высвобождение будет только высвобождением массива.

2
Sulthan 14 Дек 2012 в 18:34
Согласовано. Предупреждение Кланга здесь верное. Это очень опасное использование valueForKeyPath:.
 – 
Rob Napier
14 Дек 2012 в 18:35