5

В одном из самых крупных проектов, которые я использовал авто синтезированный свойства везде:преобразования в автоматический подсчет ссылок (ARC): «Использование необъявленный идентификатор» ошибки

//MyClass.h file: 
@interface MyClass : NSObject 

@property (nonatomic, retain) NSString *deviceName; 
@property (nonatomic, retain) NSString *deviceID; 

@end 

//MyClass.m file: 
#import "MyClass.h" 

@implementation ApplicationStatus 
// no @synthesize used at all. 

-(void)dealloc{ 

    [_deviceName release]; // gives errors only while converting to ARC with LLVM 5.0 
    [_deviceID release]; 

    [super dealloc]; 
} 

@end 

Код выше компилируется хорошо в не-ARC а также в старых версиях Xcode во время процесса преобразования ARC. При попытке преобразовать в использовании новейшего LLVM 5.0 компилятора (новейший Xcode) это дает мне миллионы ошибок: enter image description here

Что является причиной этого? Нужно ли вручную вручную создавать сотни переменных экземпляра и @synthesize вручную? Не будет ли это отступлением от философии «писать меньше кода», которую Apple рекламирует на всех WWDC?

+0

Вам вообще не повезло с этой проблемой? Я испытываю то же самое. пока я вижу два варианта: обработайте ошибку как ошибку в инструменте миграции и просто исправьте их все, запустите миграцию, а затем отмените исправления. В качестве альтернативы вы можете использовать Xcode4 для запуска миграции? – nss

+0

Мне пришлось вручную @synthesize все свойства. Я предполагаю, что это не ошибка. Может быть, ARC просто более строг в отношении отношения свойств - экземпляра. – Lukasz

+0

Я думаю, что это ошибка. Мне пришлось изменить все свои ссылки на _var на self.var - но это упало со всеми моими переопределенными геттерами и сеттерами. Если бы какая-то удача переместила объявления @property в общественное пространство. Тем не менее, он все еще борется с этим. –

ответ

1

Я просто попал в ту же проблему.

Следуя указаниям Apple, я религиозно использую self. за пределами init и _ в init. Это ломает, как вы писали, при переходе АРК в Xcode 5.

Я нашел самый простой способ заключается в следующем:

@synthesise deviceName = _deviceName; 

Изменение всех ссылок просто тупое, боль, и не так, и для читать только переменные, даже не вариант.

Автозаполнение довольно умное в настройке инструкций синтеза, и вам нужны только те материалы, которые вы собираетесь получить в init.

Смежные вопросы