Почему я не могу получить доступ к автоматически синтезированному ивуру?
Я читал, что с самой последней версией Xcode вам даже не нужно использовать синтез для генерации ivar, getter и setters, что сам Xcode обрабатывает это для вас и создает что-то вроде _youIvarName для вас, однако, попробовав это, я не смог сделать эту работу.
Даже если я объявляю свои свойства, когда я пытаюсь получить доступ к этим _yourVarName, Xcode говорит, что такой переменной не существует.
пример
Заголовочный файл:
@interface ComplexNumber : NSObject
@property double realPart;
@property double imaginaryPart;
Реализация:
#import "ComplexNumber.h"
@implementation ComplexNumber
-(double)modulus
{
return sqrt(_realPart*_realPart + _imaginaryPart*_imaginaryPart);
}
-(void)setRadius:(double)aRadius phase:(double)aPhase
{
[self setRealPart] = aRadius * cos(aPhase);
self.imaginaryPart = aRadius * sin(aPhase);
}
-(void)print
{
NSLog(@"%g + %gi", realPart, imaginaryPart);
}
Ни одна из этих попыток доступа к этим _yourIvar не сработала... какие-либо подсказки о том, что я здесь не понимаю?
РЕДАКТИРОВАТЬ:
Мой главный вопрос, если я объявлю @property
собирается ли Xcode автоматически генерировать геттеры, сеттеры и переменные экземпляра (с начальным подчеркиванием, _myVar) без необходимости использовать @synthesize
? Это то, что я читал здесь на stackru, и я не уверен, что это действительно работает.
1 ответ
Почти все выглядит так, как будто должно работать. Одна строка, которая не является допустимой целью-C,
[self setRealPart] = aRadius * cos(aPhase);
который должен быть вместо
[self setRealPart:aRadius * cos(aPhase)];
это может быть ошибка, которую вы видите?