Это всего лишь соглашение. Обычно мы называем наши переменные экземпляра понятным / логическим способом:
@interface Foo : NSObject {
Bar * bar;
Baz * baz;
}
@end
Однако нам также нравится быть многословным с именами наших методов, чтобы они также были явными в своем назначении:
- (id) initWithBar:(Bar *)bar baz:(Baz *)baz;
Проблема в том, что при реализации этого метода мы сталкиваемся с конфликтами имен:
- (id) initWithBar:(Bar *)bar baz:(Baz *)baz {
if (self = [super init]) {
bar = [bar retain];
baz = [baz retain];
}
return self;
}
Проблема здесь в том, что параметр "bar" скрывает переменную экземпляра с именем "bar", что приводит к конфликту и нежелательному поведению. Чтобы исправить это, мы привязываем статью (при необходимости) к параметру, чтобы указать, что это может быть любой бар или любой Баз:
- (id) initWithBar:(Bar *)aBar baz:(Baz *)aBaz {
if (self = [super init]) {
bar = [aBar retain];
baz = [aBaz retain];
}
return self;
}