Вопрос по ios, automatic-ref-counting – Нужны ли ключевые слова ARC для свойств, которые я не синтезирую?

6

У меня есть свойство, которое я не синтезирую, вместо этого я сам создаю геттер и сеттер. Поэтому ключевые слова ARC (сильные или слабые), как я полагаю, не имеют значения, поэтому я их исключаю. Это прекрасно работает на Xcode 4.3, но когда мой коллега открывает их на XCode 4.2, компилятор жалуется, что нет сильного / слабого ключевого слова, поэтому я дал ему указание бессмысленно вводить ключевое слово снова. Что правильно (с ключевыми словами или без)?

Чтобы было ясно: у меня есть свойство, как это@property (nonatomic) NSString *foo и в файле .m я реализую-(NSString *)foo а также-(void)setFoo:(NSString *)foo и не включать@synthesize foo, Еще одна важная деталь: соответствующий iVar отсутствует, вместо этого свойства взаимодействуют с объектом Core Data. Это не скомпилируется в XCode 4.2, если я не добавлю сильные или слабые слова.

EDIT Я подумал об еще одной важной вещи, одно из этих свойств в протоколе, я не знаю, если это имеет значение.

Ваш Ответ

2   ответа
0

Во-первых, почему вы хотите исключить свою политику памяти в своем заявлении о недвижимости? Он объявляет потребителям вашего класса, что такое политика. Разве вы не хотите, чтобы они знали?

Во-вторых, @synthesize - это не шутка. Это механизм, с помощью которого язык поддерживает КВО. Хотя вы, возможно, не используете это сейчас, почему вы исключили бы это использование в будущем.

Честно говоря, не используя полное описание в @property и не используя @synthesize, вы, IMO, участвуете в преждевременной оптимизации. Ваш текущий дизайн не сохраняет ваши рассылки сообщений и заставляет вас управлять, в случае необходимости, созданием и вводом ivars. И вы теряете черты языка.

Если у вас нет веской причины выйти за границы предпочтительных шаблонов Obj-C v2 +, и вы не перечислили их, я бы вернулся к использованию стандартного шаблона. Тогда ваша проблема просто исчезнет.

Эндрю

Error: User Rate Limit Exceeded borrrden
Error: User Rate Limit ExceededweakError: User Rate Limit ExceededweakError: User Rate Limit ExceededstrongError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
@synthesizeError: User Rate Limit Exceeded@synthesizeError: User Rate Limit Exceeded
1

на которые вы ссылаетесь, являются необязательными. Цитировать документацию:

Property Declaration and Implementation
The @property directive declares a property. An optional parenthesized set of attributes provides additional details about the storage semantics and other behaviors of the property - see “Property Declaration Attributes” for possible values.

Property Declaration Attributes
You can decorate a property with attributes by using the form @property(attribute [, attribute2, ...]). Like methods, properties are scoped to their enclosing interface declaration. For property declarations that use a comma-delimited list of variable names, the property attributes apply to all of the named properties.

If you use the @synthesize directive to tell the compiler to create the accessor methods (see “Property Implementation Directives”), the code it generates matches the specification given by the keywords. If you implement the accessor methods yourself, you should ensure that it matches the specification (for example, if you specify copy you must make sure that you do copy the input value in the setter method).

Если вы тогда используете@dynamic вместо@synthesize он сообщает компилятору, что вы будете писать свои собственные методы, и не дает ему жаловаться, когда он не находит подходящих методов.

Больше информации можно найтиВот.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded borrrden

Похожие вопросы