Поскольку я только сталкиваюсь с этой проблемой при редактировании старого кода, я хочу сделать дополнительные примечания к существующим ответам, о которых нужно знать.
Даже с более новой версией компилятора это иногда имеет значение, если вы пропустите @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
больше не будут обращаться к одним и тем же переменным. Если вы не ожидаете такого поведения, как я, это может привести к головной боли.