Obj-C не определяет "стиль" так строго, как во многих других языках, это может быть хорошо или скорее плохо, но это означает, что вы в большинстве случаев самостоятельно выбираете хороший стиль кодирования.
Вы также можете обращаться к переменным в Obj-C через себя. Так что если у вас есть экземпляр переменной test, вы можете получить к нему доступ через self-> test, это законно и всегда будет работать. Это не красиво в глазах большинства программистов на Obj-C. Он раскрывает «секрет», что объекты на самом деле являются просто структурами (точнее, ссылки на объекты являются указателями на структуры), а переменные экземпляров фактически являются членами структуры. Не то чтобы это действительно секрет, но программисты Obj-C предпочитают «скрывать» этот факт в своем коде.
Использование подчеркивания "_" в названии - очень плохая идея. Кто-то здесь отметил, что Apple резервирует подчеркивание для своего кода, но на самом деле GCC уже резервирует подчеркивание для имен символов. Точнее, уже стандарт ANSI-C гласит, что переменные, начинающиеся с двух подчеркиваний или одного подчеркивания и заглавной буквы, зарезервированы для внутреннего использования компилятором. Таким образом, использование одного подчеркивания теоретически допустимо, но случайно начинайте имя с заглавной буквы, и оно становится недействительным.
До сих пор я пытался использовать префикс my, myName вместо имени и использовать префикс self, selfName вместо имени; Поначалу выглядит как-то странно, но не выглядит слишком плохо в огромном куске кода. По крайней мере, сразу бросается в глаза, как "разные". Я также попытался использовать только одно i, iName вместо name (или iname вместо name), но меня это решение не очень удовлетворило.
Хотя я никогда не тратил время на размышления о параметрах метода. Потому что это не имеет большого значения. Это переменные, как и любые другие переменные, если они не объявлены постоянными. Они могут даже использоваться повторно для других целей метода, поскольку это не повлияет на вызывающего. Э.Г.
- (NSImage *)loadImage:(int)imageNumber
{
NSImage * res;
// Some code that assigns a value to res
// ...
// Re-use imageNumber for a different purpose
for (imageNumber = 0; ...; ...) {
// Some code
}
return res;
}
Я не вижу проблем с этим кодом. Зачем мне объявлять вторую переменную стека для этого, пока имя все еще имеет смысл (если я не перебираю изображения по числу в цикле for, имя, конечно, не имеет смысла, в этом случае я бы использовал другая переменная для него - компилятор может фактически зарезервировать только один int в стеке для обоих).