Я не могу говорить за других, но я не пользуюсь тем же именем. Если я объявляю переменную экземпляра, она имеет лидирующий знак подчеркивания, поэтому очевидно, что я имею в виду переменную экземпляра или метод setter/getter.
С помощью Xcode 4.4+ вам не нужно объявлять переменную экземпляра или вызывать @synthesize
, и компилятор автоматически создаст переменную экземпляра с ведущим подчеркиванием и предоставит вам метод setter/getter.
Однако я не думаю, что этот механизм является очень хорошей идеей, так как он поощряет разработчиков раскрывать свойства своего класса, которые не должны подвергаться воздействию.
Например, это взято из Начиная прошивкой 6 развития:
@interface BIDViewController : UIViewController
@property (weak, nonatomic) IBOutlet UIButton *button;
- (IBAction)buttonPressed:(UIButton *)sender;
@end
Теперь, когда я понимаю, что вы не хотите, чтобы запутать новичка с слишком много понятий сразу, вы должны немедленно нарушена объектно-ориентированная инкапсуляция, разоблачая объект UIButton
и метод действия для пользователей этого контроллера представлений, и ни один из них не должен отображаться.
Что происходит, например, если с помощью класса делает это:
BIDViewController *vc = ...;
vc.button = nil;
или
vc.buttonPressed(mySegmentedControl);
Все переносы ад свободно. Теперь, когда есть 1000 способов разбить программу, и мы не можем защищаться от всех из них, мы не хотим создавать уже слабую систему (Objective-C мало что дает с точки зрения определения, кто может и не может назвать один ваших методов) слабее.
выше реализация лучше проводить с использованием частных переменных и методов экземпляра, оба из которых почитаются Interface Builder:
@implementation BIDViewController()
{
IBOutlet UIButton *_button;
}
- (IBAction)_buttonPressed:(UIButton *)sender;
@end
и любые использующие классы будут иметь более жесткое время ломать эту модель.
Но, конечно, это больше думает и печатает для разработчика, и поэтому Apple представила новые функции, чтобы они могли получить то, что они хотят сделать за меньшее время (очень мало набирается, когда вы просто перетаскиваете розетку на заголовочный файл и оба сложения декларации и реализации).
DUP: http://stackoverflow.com/questions/5555736/objective-c-why-do-we-declare-ivars-in-the-h-member-area- if-property-кажется-to – justin