2010-12-16 3 views
0

Если у вас есть код (цель-с) в рамках метода, который вы хотите сконденсировать на один вызов (для краткости или читаемости), что является предпочтительной практикой.Лучшая практика для конденсации кода?

  1. не делайте этого, сохраняйте все связанные коды в методе.
  2. Добавьте новый метод к рассматриваемому объекту i.e. - (NSString *) formatedTime;
  3. Функции C-Style, определенные вне объекта.
  4. Другое, то есть что-то, что я пропустил.

ответ

2

Мое основное правило, когда переписывание кода всегда обеспечивает то, что я пишу, максимально читаем. Имея это в виду, то, я обычно:

  1. Храните код в методе, только если это относительно короткий (помещается в экран или два) и все логически связаны
  2. Добавить новый метод, если имя нового метода сделает его более читаемым, уменьшит дублирование кода или сделает поток более понятным для читателя.
  3. Избегайте функций C-стиля, если вы не имеете дело с чем-то очень низким уровнем или в контексте других C -стильные функции; в основном придерживайтесь стиля кода, который вы переписываете
  4. Прежде всего, попробуйте убедиться, что метод, который был переписан, все еще имеет смысл, делает то, что он должен делать (т. е. не было введено ошибок), и его можно быстро прочитать и понимается другим разработчиком
+0

Спасибо, Тим, отличный ответ. В прошлом я делал так, как вы говорите, и ушел с разумно названными методами, чтобы убрать разделы кода, которые могут быть легко инкапсулированы. Я просто хотел убедиться, что я поступаю правильно с точки зрения лучшей практики и того, что другие ожидают. Очень признателен. – fuzzygoat 2010-12-16 20:28:22

2

Другое, что я бы сказал, что если вы разыгрываете код в дополнительные вспомогательные методы, вы должны объявить эти методы в расширении класса, а не в главном заголовке для класса. Вот пример .m файл:

@interface MyClass() 
- (CGRect)makeRect; 
- (NSString*)formatStringFromInput:(NSString*)input; 
@end 

@implementation MyClass 

//Implementation here 

@end 
1

Это похоже на johnw188 hint, но идет немного дальше:

В расширении класса вы можете не только частные методы, но личные свойства тоже.

@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 

Выгода вполне понятно: Вы получаете @ собственность/@ синтезируют власть, но только доступ к нему с с-в объекте класса. Частная собственность доступна только на self.