Мне не удалось найти какую-либо информацию по этой теме, и большинство из того, что я знаю об этом, произошло в результате полной аварии (и несколько часов, пытаясь понять, почему мой код не работает). Изучая objective-c большинство учебных пособий, которые я нашел, производят переменные и свойства с тем же именем. Я не понимаю значение, потому что кажется, что свойство делает всю работу, а переменная просто видна там. Например:
test.h
@interface Test : NSObject {
int _timesPlayed, _highscore;
}
@property int timesPlayed, highscore;
// Methods and stuff
@end
Test.m
@implementation Test
@synthesize timesPlayed = _timesPlayed;
@synthesize highscore = _highscore;
// methods and stuff
@end
Что я знаю
1) Итак, сегодня я узнал (после нескольких часов смущения), что независимо от того, насколько сильно вы меняете свойства highscore = 5091231
, это ничего не изменит, когда вы попытаетесь вызвать [test highscore], поскольку он все равно будет возвращайте значение _highscore, которое (я думаю) является ivar, которое было установлено в test.h. Таким образом, все изменения переменных в test.m должны меняться _highscore, а не highscore. (Исправьте меня, если я ошибаюсь здесь, пожалуйста)
2) Если я правильно понимаю (я, вероятно, не знаю), то ивары, установленные в test.h, представляют собой фактическую память, где, поскольку @properties - это просто способы доступа к этой памяти. Таким образом, вне реализации я не могу получить доступ к _highscore, не пройдя через свойство.
Что я не понимаю
В основном, что я не понимаю об этой ситуации, нужно ли мне вообще использовать ivars или я могу просто использовать @property и @synthesize. Похоже, что ивары - это просто дополнительный код, который на самом деле ничего не делает, но меня смущает. Некоторые из последних явлений, которые я видел, похоже, не используют иваров, но потом некоторые делают. Так что это всего лишь вещь предпочтения в кодировании или это действительно важно? Я попытался выполнить поиск в Apple Documentation, но я немного потерялся там и, похоже, не нашел то, что искал. Любые рекомендации будут очень благодарны.