@property определения с ARC: сильный или удержание?
Используя Xcode 4.2 и ARC, я замечаю, что автоматически сгенерированный код для NSManagedObject
по-прежнему читается следующим образом для свойств:
@property (nonatomic, retain) NSString * someString;
1) Не следует теперь retain
заменять на strong
или weak
?
2) Почему автогенерированный код по-прежнему использует retain
3) Какая правильная замена для retain
в этом заявлении свойства?
В настоящее время я отлаживаю проблему с помощью NSFetchRequest
, и я думал, что это может быть источником проблемы. Мысли?
Ответы
Ответ 1
1) Не следует ли теперь заменять сильным или слабым?
Нет. Вы не можете заменить сохранение слабым; они разные. И сильный - это синоним 100% для сохранения; они идентичны. Вы можете использовать любой из них, поэтому здесь нет "нужно". Вы можете заменить сохранение сильным, если хотите, но вам не нужно.
2) Почему автогенерированный код по-прежнему использует сохранение
Почему бы и нет? См. (1). сохранить правильно, поэтому нет проблем.
3) Какая правильная замена для сохранения в этом заявлении свойства?
Нет необходимости заменять сохранение.
В настоящее время я отлаживаю проблему с помощью NSFetchRequest, и я думал, что это может быть источником проблемы. Мысли?
Это не так.
Ответ 2
Чтобы ответить на все три вопроса в одном: retain
и strong
являются синонимами друг друга, поэтому оба правильны. В документации указано
retain
подразумевает __strong
право собственности
strong
подразумевает __strong
право собственности
Ответ 3
Перед ARC вы должны "освободить" объект, который сохраняется. Это означает, что удержание имеет счетную часть. После ARC вам не нужно выпускать. Поэтому используйте сильные. Его визуальная подсказка, что вам не нужно вызывать выпуск.
Ответ 4
"сохранить" равен "сильному".
"strong" используется, например:
@property (nonatomic, strong) NSString * someString;
И используется "__strong":
-(void) someMethod
{
__strong NSString* vStr = [[NSString alloc] initWithString:@"some string"];
}
В Apple Docs. говорит:
Атрибуты свойств
Ключевые слова слабые и сильные представлены как новые объявленные атрибуты свойств, как показано в следующих примерах.
// The following declaration is a synonym for: @property(retain) MyClass *myObject;
property(strong) MyClass *myObject;
Apple doc. http://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html