Собственность без метода iVar и метода получения? - PullRequest
1 голос
/ 09 января 2012

Я заметил это сегодня и просто хочу проверить мое понимание того, что происходит.«prefixName» - это свойство только для чтения, которое использует метод getter для прямой передачи значения назад; iVar не сохраняет результат в объекте PR_ViewController.Кроме того, если бы свойство не было доступно только для чтения, добавление установщика все равно не работало бы, поскольку iVar для этого не устанавливался.

  • Создано: [Meth] prefixName

В отличие от "characterName"работает обычным образом для свойства, добавляя метод get, метод set и iVar.

  • Создано: [Meth] имя_символа
  • Создано: [Meth] setCharacterName
  • Создано: [iVar] имя персонажа

.

@interface PR_ViewController : UIViewController
@property (nonatomic, readonly) NSString *prefixName;
@property (nonatomic, retain) NSString *characterName;

.

@implementation PR_ViewController
@synthesize characterName;

- (NSString *)prefixName {
    return @"FRED";
}

1 Ответ

7 голосов
/ 09 января 2012

Вам не нужно синтезировать средства доступа - вы можете прекрасно написать их самостоятельно, что и делается в вашем примере.

Кроме того, свойство только для чтения не обязательно должно быть основано на иваре, но может быть вычислено на основе других иваров или свойств. Это может быть полезно, если вы используете привязки для отображения значений в пользовательском интерфейсе, которые получены из других свойств, если вам нравится этот стиль кодирования.

Вот простой пример свойства только для чтения, вычисленного на основе двух других свойств:

Заголовочный файл:

@property double width;
@property double height;

@property (readonly) double area;

Реализация:

@synthesize width, height;

- (double)area
{
    return width*height;
}


+ (NSSet *)keyPathsForValuesAffectingArea
{
    return [NSSet setWithObjects:@"width", @"height", nil];
}

Теперь, когда изменяется либо width, либо height, свойство area также изменяется, и его изменения распространяются на слушателей (благодаря keyPathsForValuesAffectingArea.)

Вы также можете увидеть пример fullName в этом документе .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...