Предупреждение в сборщике мусора Какао-приложение о свойствах - PullRequest
1 голос
/ 03 июня 2011

Это мой код:

@interface Object : NSObject {
@private
  NSArray *array;
}

@property NSArray *array;

@end

И @synthesize в реализации.Я получаю предупреждение компилятора в строке с предупреждением @property:

: атрибут присвоения по умолчанию для свойства 'array', который реализует протокол NSCopying, не подходит с -fobjc-gc [-only]

Если я напишу свойство как @property (assign) NSArray *array, оно не появится.О чем это?

Ответы [ 3 ]

2 голосов
/ 03 июня 2011

В вашем случае вы создаете свойство, которое является указателем на объект.Назначение, которое является значением по умолчанию, не подходит для объектов, которые должны быть объявлены как retain или copy.

В вашем случае вы должны определить свое свойство как:

@property (nonatomic, copy) NSArray *array;

Вы можете использовать retain вместо copy здесь, но есть веские причины для использования copy.

edit

Чтобы ответить на более глубокий вопрос, который вы, похоже, задаете - взгляните на эту ветку из списков рассылки Cocoa.

Используете ли вы компилятор LLVM или gcc?

0 голосов
/ 10 ноября 2011

Относительно назначения и копирования в приложении с поддержкой ГХ, я нашел это через Google ...

http://www.cocoabuilder.com/archive/cocoa/194064-use-of-assign-vs-copy-for-accessors-in-garbage-collected-app.html

Я думаю, что мы обычно используем назначение, но при необходимости будем использовать копию, какнапример, для объекта NSString.Таким образом, чтобы избавиться от предупреждения, мы просто явно указываем его как assign.

0 голосов
/ 03 июня 2011

Свойства по умолчанию для назначения. Ваша собственность является правопреемником.

...