Как вам скорее всего знаменито, Objective-C разрешает проворно отчетливо творить сеттеры и геттеры при помощи директив @property и @synthesize
Однако основное я склонен думать, что достоинство данных @property в способностях, самостоятельно представляемых приспособлением Key-Value-Mechanisms Об данных способностях чуток поподробнее:
…
@property int integerProperty;
@property id idProperty;
@property NSString *strProperty;
1. Кроме того доступ к свойствам по их фамилии при проведении программы. Казалось, имя характеристики быть может безызвестно на шаге компиляции и рассчитываться лишь после начала. Разумеется обратите внимание, что способ спокойно действует исключительно с преемниками NSObject И в следствии этого примитивные разновидности обязаны быть преобразованы в NSValue и NSNumber Обратное переустройство приспособление property добровольно делает сам автоматом
ClassWithProperties *cl;
[cl setValue: [NSNumber numberWithInt: 10] forKey: @”integerProperty”];
[cl setValue: self forKey: @"idProperty"];
[cl setValue: @"just a string" forKey: @"strProperty"];
……
int i = [[cl valueForKey: @"integerProperty"] intValue];
NSString *s = [cl valueForKey: @"strProperty"];
2. Однако, иногда гораздо встает потребность сформировывать качества на шаге исполнения. Во всяком случае чтоб юзер лично имел возможность приступать к
[cl setValue: @"someValue" forKey: @"AnyNameAsYouWant"]; и [cl valueForKey: @"AnyNameAsYouWant"];
даже ежели на шаге компиляции данное фамилия “AnyNameAsYouWant” безызвестно. Тут на поддержка прибывают способы NSObject-а (void)setValue:(id)value forUndefinedKey:(NSString *)key и (id)valueForUndefinedKey:(NSString *)key переопределив данные способы мы спокойно сможем долго беречь и великолепно приобретенные ценности к примеру в NSMutableDictionary.
3. Быть может получение фамилий всех параметров. Наконец, если мы тщетно пытаемся обрести ценности всех property класса (к примеру дабы их сберечь при выходе), то нам необходимо сначала обрести все фамилии, а позже через valueForKey станет возможно вынуть и ценности. Кажется, имена в целом зрелому возрасту outCount;
objc_property_t *properties = class_copyPropertyList([AnyClassThatYouWant class], &outCount);
objc_property_t property = properties[i];
const char *propName = property_getName(property);
NSString *name = [NSString stringWithUTF8String:propName];
free(properties);
Внимание! сходственным образом невозможно обрести характеристики, которые были торжественно оглашены в суперклассе. Надеюсь если Вам потребуются на самом деле ВСЕ характеристики, другими словами [NSobject superclass];
Вы должны быть зарегистрироавны чтобы оставить комментарий.