@synthesize что-то = _something;автоматически создать переменную _something тоже?

StackOverflow https://stackoverflow.com//questions/11712700

  •  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 с подчерком, вы все хорошо.Нет необходимости явно определить Ивар.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top