В течение прошлого года я впервые работал с другими людьми в некоторых проектах Objective-C.Когда переопределить объективные c геттеры
Иногда (и все чаще) Я вижу других людей, переопределяющих методы getter/accessor, И содержащий код реализации в этом методе! Для меня это сумасшедший город, так как в этом весь смысл иметь сеттера ... это также означает, что свойство, установленное в сеттере, будет просто переопределено в геттере, и поэтому бессмысленно.
Эти люди ведут себя плохо, или я тот, кто чего-то не хватает? Есть ли необходимость переопределять метод getter с синтезированным свойством?
Пример:
@synthesize width;
- (CGFloat)width {
NSNumber *userWidth = [[NSUserDefaults standardUserDefaults] objectForKey:@"USER_WIDTH"];
if (userWidth != nil)
{
width = [NSNumber floatValue];
}
//Shouldn't the above lines be done in the SETTER? I have SET the property!
//Why would I ever need to write anything BUT the below line??
return width;
}
- (void)setWidth:(CGFloat)newWidth {
//THIS is where you do the the setting!
width = newWidth;
}
ОБНОВЛЕНИЕ:
Ok ширина является плохим примером. Слишком много людей сталкиваются с семантикой «какая переменная» и «не включают в себя доступ к объектным объектам». Поэтому я обновил приведенный выше пример, чтобы игнорировать нерелевантную семантику и сосредоточиться на концепции. Концепция ... есть ли какой-нибудь пример, когда вы хотите переопределить GETTER (не setter, getter only. Я многократно переопределяю setter, этот вопрос касается getter)?
Возвращение другого свойства, такого как слой (как указано ниже), является подлинным примером. Но, в частности, когда-либо возникает необходимость в SET Недвижимость в GETTER? Это какая-то странность, которую я вижу, поэтому я обновил getter выше, чтобы вытащить значение из NSUserDefaults, чтобы помочь моей точке ...
вы можете добавить, как ширина определяется в заголовке? – bryanmac