Разъяснения по присвоению, сохранению, копированию, сильные? - PullRequest
8 голосов
/ 27 января 2012

Я все еще новичок в Objective-C и испытываю некоторые трудности, пытаясь найти подходящий способ использования присвоения, сохранения, копирования, сильной и т. Д. При установке свойства.

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

@property (nonatomic, ??) NSMutableArray *myArray
@property (nonatomic, ??) NSString *myString
@property (nonatomic, ??) UIColor *myColor
@property (nonatomic, ??) int *myIn
@property (nonatomic, ??) BOOL *myBOOL

Спасибо ....

Ответы [ 2 ]

20 голосов
/ 27 января 2012

Повторюсь, это зависит от контекста. В ситуации без ARC:

@property (nonatomic, copy) NSMutableArray *myArray
@property (nonatomic, copy) NSString *myString
@property (nonatomic, retain) UIColor *myColor
//Note the change to an int rather than a pointer to an int
@property (nonatomic, assign) int myInt
//Note the change to an int rather than a pointer to an int
@property (nonatomic, assign) BOOL myBOOL

Копия на myArray предназначена для предотвращения изменения другим «владельцем» установленного вами объекта. В проекте ARC все немного меняется:

@property (nonatomic, copy) NSMutableArray *myArray
@property (nonatomic, copy) NSString *myString
@property (nonatomic, strong) UIColor *myColor
//Note the change to an int rather than a pointer to an int
@property (nonatomic, assign) int myInt
//Note the change to an int rather than a pointer to an int
@property (nonatomic, assign) BOOL myBOOL

Изменение в первую очередь касается myColor в вашей ситуации. Вы не будете использовать retain, так как не будете напрямую управлять подсчетом ссылок. Ключевое слово strong - это способ подтверждения "владения" недвижимостью, аналогичный retain. Также предоставляется дополнительное ключевое слово weak, которое обычно используется вместо присваивания для типов объектов. Типичный пример Apple weak - для делегатов. Я бы порекомендовал пройти Переход к примечаниям к выпуску ARC в дополнение к Руководство по управлению памятью раз или два, так как здесь больше нюансов, чем можно легко описать в статье SO.

0 голосов
/ 27 января 2012
@property (nonatomic, copy) NSMutableArray *myArray
@property (nonatomic, copy) NSString *myString
@property (nonatomic, retain) UIColor *myColor
@property (nonatomic) int myIn
@property (nonatomic) BOOL myBOOL

копирует изменяемые объекты или объекты с изменяемыми подклассами, такими как NSString: это останавливает их изменение другим владельцем.хотя я не думаю, что Apple рекомендует использовать изменяемые объекты в качестве свойств

, другие объекты обычно сохраняются, за исключением делегатов, которые назначаются для предотвращения циклов владения

примитивами типа int и BOOL назначены, это опция по умолчанию для @property, поэтому указывать ее не нужно, хотя не мешает добавить ее, если вы чувствуете, что она помогает читабельности

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...