Лучшая практика для конденсации кода?
Если у вас есть код (objective-c) в методе, который вы хотите сконденсировать на один вызов (для краткости или читаемости), что является предпочтительной практикой.
- не делайте этого, сохраняйте все связанные коды в методе.
- Добавить новый метод для объекта, о котором идет речь, т.е. - (NSString *) formatedTime;
- Функции C-Style, определенные вне объекта, о котором идет речь.
- Другое, что-то я пропустил.
Ответы
Ответ 1
Мое основное правило, когда переписывающий код всегда обеспечивает то, что я пишу, максимально читаем. Имея это в виду, я обычно:
- Сохраняйте весь код в методе только в том случае, если он относительно короткий (подходит на экране или два) и все логически связаны
- Добавить новый метод, если имя нового метода сделает его более читаемым, уменьшит дублирование кода или сделает поток более понятным для читателя.
- Избегайте функций C-стиля, если не имеете дело с чем-то очень низким уровнем или в контексте других функций стиля C; в основном сохраняйте стиль кода, который вы переписываете.
- Прежде всего попробуйте убедиться, что метод, который был переписан, все еще имеет смысл, делает то, что он должен был делать (т.е. не было введено ошибок), и его можно быстро прочитать и понять другим разработчиком
Ответ 2
Другое, что я бы сказал, это то, что если вы разыгрываете код в дополнительные вспомогательные методы, вы должны объявлять эти методы в расширении класса, а не в главном заголовке для класса. Вот пример файла .m:
@interface MyClass()
- (CGRect)makeRect;
- (NSString*)formatStringFromInput:(NSString*)input;
@end
@implementation MyClass
//Implementation here
@end
Ответ 3
Это похоже на подсказку johnw188, но идет немного дальше:
В расширении класса вы можете не только иметь частные методы, но и частные свойства.
@interface MyClass()
@property(retain) MyOtherClass *aNotherObject; //declared in .h. Should be @private
- (CGRect)makeRect;
- (NSString*)formatStringFromInput:(NSString*)input;
@end
@implementation MyClass
@synthesize aNotherObject;
//Implementation here
-(void)dealloc
{
self.aNotherObject = nil;
[super dealloc];
}
@end
Выгода совершенно очевидна: вы получаете свойство @property/@synhesize, но получаете доступ только к нему с помощью объекта класса. частные свойства доступны только на self
.