Поскольку я только сталкиваюсь с этой проблемой при редактировании старого кода, я хочу сделать дополнительные примечания к существующим ответам, о которых нужно знать.
Даже с более новой версией компилятора это иногда имеет значение, если вы пропустите @synthesize propertyNameили нет .
В случае, если вы объявляете переменную экземпляра без подчеркивания, все еще синтезируя ее, например:
Заголовок:
@interface SomeClass : NSObject {
int someInt;
}
@property int someInt;
@end
Реализация:
@implementation SomeClass
@synthesize someInt;
@end
self.someIntполучит доступ к той же переменной, что и someInt. Отсутствие начального подчеркивания для ivars не соответствует соглашениям по именованию, но я просто попал в ситуацию, когда мне пришлось читать и изменять такой код.
Но если вы теперь думаете: «Эй, @synthesize больше не важен, так как мы используем более новый компилятор», вы ошибаетесь! Ваш класс будет иметь два ивара , а именно someIntплюс автоматически сгенерированную_someInt переменную. Таким образом self.someIntи someIntбольше не будут обращаться к одним и тем же переменным. Если вы не ожидаете такого поведения, как я, это может привести к головной боли.