@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