Причина использования ivars vs properties в задаче c

Мне не удалось найти никакой информации по этой теме, и большая часть того, что я знаю об этом, появилась совершенно случайно (и нескольких часов попыток выяснить, почему мой код не работает ). Изучая цель -c, в большинстве туториалов я находил переменные make и свойства с одинаковыми именами. Я не понимаю значения, потому что кажется, что свойство делает всю работу, а переменная просто сидит там. Например:

Тест.ч

@interface Test : NSObject {
    int _timesPlayed, _highscore;
}

@property int timesPlayed, highscore;

// Methods and stuff

@end

Тест.м

@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 )Если я правильно понимаю (Я, вероятно, не )ivars, установленные в test.h, представляют реальную память, тогда как @properties — это просто способы доступа к этой памяти. Таким образом, вне реализации я не могу получить доступ к рекорду _без использования этого свойства.

Чего я не понимаю

По сути, чего я не понимаю в этой ситуации, так это того, нужно ли мне вообще использовать ivars или я могу просто использовать @property и @synthesize. Кажется, что ивары — это просто дополнительный код, который на самом деле ничего не делает, но сбивает меня с толку. Некоторые из самых последних тутонов, которые я видел, похоже, не используют ивары, но некоторые используют. Так это просто предпочтение кодирования или это действительно важно?Я пробовал искать в документации Apple, но я немного заблудился и, кажется, никогда не находил то, что ищу. Любое руководство будет принято с благодарностью.

21
задан CaldwellYSR 13 July 2012 в 21:12
поделиться