Является ли указание имени ivar для @synthesize избыточным или хорошей практикой? - PullRequest
5 голосов
/ 09 января 2012

Я смотрел курс Stanford iTunes U на iOS (cs193p) , где учитель прямо говорит всегда указывать имя ivar при использовании @synthesize, чтобы избежать проблем, таких как

@synthesize name = _name;

Но, просматривая документацию Какао по объявленным свойствам , я действительно не видел ни этого, ни другого примера кода.

Это подводит меня к вопросу,зачем это нужно?Разве не достаточно просто использовать @synthesize с именем свойства?Есть ли какие-то конкретные проблемы, которых можно избежать?

Ответы [ 3 ]

6 голосов
/ 09 января 2012

Причина этого заключается в том, чтобы предотвратить прямой доступ к иварам и, таким образом, вызвать проблемы с управлением памятью.Например:

Правильно: self.name = newName; Неправильно: name = newName;

Получатели и установщики свойства обеспечивают правильное управление памятью.Чтобы получить доступ к ivars, вы должны явно ввести начальное подчеркивание, что очень трудно сделать случайно.Единственный раз для прямого доступа к ивару есть init, dealloc и геттеры и сеттеры.

1 голос
/ 09 января 2012

Если вы не укажете имя ivar, оно будет использовать то же имя, что и свойство.Итак, эти два эквивалента:

@synthesize name;
@synthesize name = name;

Если все, что вы делаете, это name = name, то да, это полностью избыточно.

Причина, по которой люди указывают такие вещи, как name = _name, заключается виспользуйте другое имя для ивара и свойства.Одна из причин этого заключается в том, что вы не путаетесь между собственностью и иваром, но, честно говоря, если вам не ясно, в чем разница, эта небольшая настройка не спасет вас.

0 голосов
/ 09 января 2012

Это определенно не избыточно, потому что @synthesize name = _name; имеет другое значение, чем @synthesize name;. Если вы хотите назвать свои ивары по-другому, чем ваши свойства, во многом зависит от ваших личных предпочтений. Оба варианта отлично подходят.

...