Одним из хороших моментов, на мой взгляд, является Матрица структуры зависимостей : http://www.jetbrains.com/idea/features/dependency_analysis.html#link0
Хорошее введение в использование и преимущества DSM можно найти на веб-сайте Lattix (самостоятельный продукт): http://www.lattix.com/files/dl/slides/s.php?directory=4tour
Вы можете написать объявление как таковое:
- (void) drawRoundedRect:(NSRect)aRect inView:(NSView *)aView withColor:(NSColor *)color fill:(BOOL)fill
Последующий вызов (с 4 параметрами ) может выглядеть так:
[self drawRoundedRect:rect inView:self withColor:[NSColor greenColor] fill:YES];
где rect
- это ранее определенный NSRect, self
- это NSView, из которого вызывается метод,
В Objective-C имена методов правильно называются «селекторами» и могут состоять из одной или нескольких частей. Если метод принимает один или несколько параметров, каждая часть селектора имеет вид:
selectorFragmentName:(ParameterType)parameterName
Например, вы увидите объявления метода, подобные этому из NSColor:
+ (NSColor*) colorWithDeviceRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha;
В этом случае имя метода (селектора) - colorWithDeviceRed: green: blue: alpha: - остальное обозначает область действия (- например, метод, + для класса), тип возвращаемого значения (здесь NSColor *), а также тип и имя для каждого параметра.
CRITICAL! В отличие от большинства других языков, вы не можете перегружать методы в Objective-C - это означает, что у вас не может быть двух методов с одним и тем же селектором, но с разным числом параметров и / или порядком типов. Например, у вас не может быть этих двух методов:
- (id) initWithObjects:(NSArray*)anArray;
- (id) initWithObjects:(NSSet*)aSet;
Поскольку имя селектора для обоих - initWithObjects: Objective-C не делает различий между ними. Имена селекторов переводятся в уникальные целые числа для чрезвычайно быстрого поиска, что полезно в динамической среде выполнения, но разочаровывает людей, ожидающих перегрузки метода. Наиболее распространенный случай перегрузки в таких языках, как Java, - это конструкторы, что не является проблемой в Objective-C из-за шаблона alloc / init. Для других методов выбор уникальных имен позволяет избежать проблемы.
С точки зрения стиля, поскольку параметры перемежаются в селекторе методов, программисты Objective-C (и Xcode) часто выравнивают части длинных селекторов по двоеточию для удобства чтения. , как для объявления / определения:
+ (NSColor*) colorWithDeviceRed:(CGFloat)red
green:(CGFloat)green
blue:(CGFloat)blue
alpha:(CGFloat)alpha;
, так и для вызова:
NSColor* myColor = [NSColor colorWithDeviceRed:0.5
green:0.6
blue:0.7
alpha:0.9];
Пробел не имеет отношения к компилятору.
Джефф точно описал, как выглядят эти методы. Если вы хотите увидеть, как это будет выглядеть как функция C, это будет выглядеть примерно так:
void drawRoundedRect_inView_withColor_fill( MyObject* self, SEL _cmd, NSRect aRect, NSView* aView, NSColor* color, BOOL fill );
Все параметры «names» объединяются, чтобы сформировать одно имя метода, а два скрытых параметра, self и _cmd, добавляются к перед.