Свойства именования отличаются от их экземпляра var? - PullRequest
0 голосов
/ 24 февраля 2011

Я новичок в target-c 2.0 (из .NET c #) и обнаружил свойства.Они очень удобны для работы с управлением памятью (сохранение).

Так что я могу установить переменные в методе init довольно просто, как

@property (retain) NSDate *d1, *d2;

и

@synthesize d1, d2;

-(id)init {
    if (self = [super init]) {
        // initialize Properties
        self.d1 = [NSDate date];
        self.d2 = [NSDate date];
    }            
return self;
}

Иногда я забываю (может быть, из-за моего происхождения .NET) использовать «я».Это выглядит знакомо и не очень похоже на плохое кодирование.Так что я могу пропустить его в будущем снова ...

-(id)init {
    if (self = [super init]) {
        // initialize Properties
        d1 = [NSDate date];
        d2 = [NSDate date];
    }            
return self;
}

Но это приведет к нарушению EXC_BAD_ACCESS, когда свойство будет установлено с использованием self.d1 = [NSDate date]; или извне objXy.d1 = [NSDate date];

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

Просто интересно, кто-то делает это так или по-другому ...?Мои исследования показали, что это возможно, но мне нужно объявить переменные самостоятельно в заголовочном файле.Для этого я бы использовал префикс (_ зарезервирован для CF), поэтому мне нужно что-то большее, например, XY_ ... хм ... не очень удобно ...

Почему бы не иметь атрибут дляСвойства типа (уникальные), которые будут генерировать экземпляр var с именем, отличным от имени свойства ... @ apple

Ответы [ 2 ]

1 голос
/ 26 марта 2011

Это возможно и очень просто! Когда вы используете @synthesize, сделайте следующее:

@synthesize propertyName=_ivarName;

Это создаст ивар с именем _ivarName, как если бы вы объявили его в своем заголовочном файле.

0 голосов
/ 13 марта 2011

У вас есть хорошая идея, но на данный момент вам нужно объявить переменную самостоятельно, если вы хотите использовать ивар с именем, отличным от имени свойства.

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