@ свойства определения с ARC: сильный или сохранить? - PullRequest
80 голосов
/ 17 октября 2011

Используя Xcode 4.2 и ARC, я замечаю, что автоматически сгенерированный код для NSManagedObject по-прежнему выглядит следующим образом для свойств:

@property (nonatomic, retain) NSString * someString;

1) Не следует ли retain теперь заменить на strong или weak?

2) Почему автоматически сгенерированный код все еще использует retain

3) Как правильно заменить retain в этом операторе свойства?

В настоящее время я отлаживаю проблему с помощью NSFetchRequest, и я подумал, что это может быть источником проблемы. Мысли?

Ответы [ 4 ]

110 голосов
/ 04 ноября 2011

1) Разве нельзя удерживать сейчас, заменить сильным или слабым?

Нет.Вы не можете заменить удержание слабым;они разные.И сильный это 100% синоним для сохранения;они одинаковые.Вы можете использовать любой из них, поэтому здесь нет «должен».Вы можете заменить retain сильным, если хотите, но не обязаны.

2) Почему автоматически сгенерированный код все еще использует retain

Почему бы и нет?Смотрите (1).retain корректен, поэтому проблем нет.

3) Как правильно заменить retain в этом операторе свойства?

Нет необходимости заменять retain.

В настоящее время я отлаживаю проблему с помощью NSFetchRequest, и я подумал, что это может быть источником проблемы.Мысли?

Это не так.

40 голосов
/ 18 октября 2011

Чтобы ответить на все три вопроса в одном: retain и strong являются синонимами друг друга, поэтому оба они верны. В документации говорится

retain подразумевает __strong владение

strong подразумевает __strong владение

4 голосов
/ 15 июня 2013

Перед ARC вы должны «освободить» объект, который сохраняется.Это означает, что удержание имеет противоположную часть.После ARC вам не нужно выпускать.Так что пользуйтесь сильным.Это визуальный ключ, который вам не нужно называть релизом.

3 голосов
/ 26 июня 2013

«удерживать» равно «сильному».

"сильный" используется, например:

@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, док. http://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html

...