@synthesize что-то = _something;автоматически создать переменную _something тоже?
-
13-12-2019 - |
Вопрос
Я понимаю, что @synthesize автоматически создает геттеры и сеттеры для переменной экземпляра.Когда я указываю часть = _something, я понимаю, что это сообщает компилятору/среде выполнения, что я хочу, чтобы он использовал определенную резервную переменную для геттеров/сеттеров.
Objective-C автоматически создает переменную _something вместе с моими геттерами/сеттерами или мне следует определить эту переменную экземпляра в моем файле интерфейса/реализации?
Решение
Вопрос в том, создают ли @property в файле заголовка и @synthesize в реализации базовый ivar или же ivar должен быть указан в файле заголовка.Пример в заголовочном файле:
@interface SomeClass : NSObject {
NSString *_someString; // Is this needed???
}
@property NSString *someString;
и в реализации:
@synthesize someString = _someString;
Ответ в том, что это зависит от того, используете ли вы устаревшую или современную среду выполнения.В iOS вы всегда используете современную среду выполнения, поэтому вам никогда не понадобится NSString *_somestring
строка, но этот вопрос касается Mac OS X.Для Mac OS X, если вы используете 64-разрядную программу в Mac OS X 10.5 или более поздней версии, вы используете современную среду выполнения, в противном случае вы используете устаревшую среду выполнения и вам нужна дополнительная строка в файле заголовка.Поскольку была опубликована некоторая дезинформация, вот ссылка: Руководство по программированию во время выполнения Objective-C.
Другие советы
Извините, неправильно прочитайте часть вашего вопроса.Если вы сделаете роль @synTheSize с подчерком, вы все хорошо.Нет необходимости явно определить Ивар.