Ошибка повторной проверки ARC Xcode 4 - «изменения сохраняют / освобождают свойства указателя» - PullRequest
3 голосов
/ 13 декабря 2011

Пытаюсь пройти перепроверку преобразования ARC, но я не уверен, как решить эту проблему. Метод и свойство расходятся, и я не уверен, что здесь делать:

- (void)getObjects:(id *)objects andKeys:(id *)keys {
     return [self.items getObjects:objects andKeys:keys];
}

@interface SoapArray : SoapObject <NSCopying, NSMutableCopying, NSCoding, NSFastEnumeration> {
      NSMutableArray* items;
}

@property (nonatomic, retain) NSMutableArray* items;

ОШИБКИ С:

Отправка '__autoreleasing id *' параметру типа '__unsafe_unretained id *' изменяет свойства сохранения / освобождения указателя

1 Ответ

3 голосов
/ 13 декабря 2011

Вам необходимо обновить свою подпись, чтобы она соответствовала новой ARC-совместимой getObjects:andKeys:

- (void)getObjects:(id __unsafe_unretained [])objects andKeys:(id __unsafe_unretained [])keys;

Семантическая память по умолчанию здесь будет __autoreleasing, но этот метод возвращает __unsafe_unretained объектов, так что вам тоже нужно.

Имейте в виду, что это __unsafe_unretained. Когда вы возвращаете свой массив id, к ним не применяется управление памятью. Так что если self исчезнет, ​​эти объекты, вероятно, тоже будут (и они не будут обнулять указатели, как свойство weak). Обычно это нормально и то, что вы хотите, но имейте это в виду.

...