Я - огромный сторонник кода по SPROC's. Причины номер один сохраняют код сильно связанным, тогда вторым является простота управления исходным кодом без большого количества пользовательских утилит для втягивания его.
В нашем DAL, если у нас есть очень сложные SQL-операторы, мы обычно включаем их как файлы ресурсов и обновляем их по мере необходимости (это могло быть отдельным блоком также, и выгруженный на дБ, и т.д....).
Это сохраняет наш код и наши вызовы sql сохраненными в том же управлении версиями, не "забывая" запускать некоторые внешние приложения для обновления.
The convention I have seen in new code is to use the dot for properties, and always use square brackets for messages/selectors (what you call methods). The dot was introduced in Objective-C 2.0, so the disagreement of information you find online is not entirely unexpected.
It's also entirely possible to use square brackets for everything, still (and I do):
foo = [myObject backgroundColor];
[myObject setBackgroundColor:foo];
is equivalent to
foo = myObject.backgroundColor;
myObject.backgroundColor = foo;
To reiterate, you should not be using the dot for messages, only properties.
To answer your specific question, [UIColor clearColor]
belongs in brackets because it is not a property; it's actually a class message to UIColor
(+(UIColor)clearColor
).
You sound like you come from a Java world, so this might be helpful:
MyObject *foo = [[MyObject alloc] initWithAwesome:YES]; /* MyObject foo = new MyObject(TRUE); */
[foo doSomethingWithNumber:5 andString:"five"]; /* foo.doSomething(5, "five"); */
MyColor *bar = foo.faceColor; /* MyColor bar = foo.faceColor; */
MyColor *baz = [foo faceColor]; /* MyColor baz = foo.faceColor; */
foo.backColor = bar; /* foo.backColor = bar; */
[foo setUndersideColor:baz]; /* foo.undersideColor = baz; */
The "setXXX" and "XXX" messages come from synthesized dynamic properties, and are an Objective-C idiom. The "dot" is simply a shorthand for calling those methods, and is roughly equivalent.
EDIT: Now that I've got some upvotes, time to make some of you reconsider >:)
I never use dots, and neither should you.
Я использую точечную нотацию для свойств, потому что
for ( Person *person in group.people){ ... }
немного легче читать, чем
for ( Person *person in [group people]){ ... }
, во втором случае читаемость прерывается переводом вашего мозга в режим отправки сообщений, тогда как в В первом случае ясно, что вы обращаетесь к свойству people объекта группы.
Я также буду использовать его при изменении коллекции, например:
[group.people addObject:anotherPerson];
немного читабельнее, чем
[[group people] addObject:anotherPerson];
. быть в действии добавления объекта в массив вместо объединения двух сообщений.
Big У Nerd Ranch есть некоторые мысли по поводу точечной записи, которые стоит прочитать.
Есть также опровержение .
По (строгому) соглашению средства доступа к свойствам записываются как методы, названные по имени переменной экземпляра для получателя, а имя переменной экземпляра (с заглавной буквы) с префиксом "set" для установщика (так что для переменная экземпляра foo, у вас были бы foo и setFoo).
Как указывали другие, начиная с Objective-C 2.0, если вы напишете object.foo, он будет отображаться на вызов метода [object foo] при получении или [object setFoo: arg] для настройки. Вы можете использовать любую форму, и некоторые люди по-прежнему предпочитают полный синтаксис метода даже при использовании исключительно Objective-C 2.0.
Отдельным, но связанным дополнением к Objective-C 2.0 является @ property / @ synthesize / @ dynamic ключевые слова для генерации геттеров и сеттеров. Вы можете смешивать и сопоставлять их с точечной нотацией - одно не требует другого.
Да, я тоже только начал изучать это:
В отличие от других языков, синтаксис для вызова метода объекта не objName.someMethod ();
Это [objName someMethod]
Оператор с точкой используется для получения или установки значения свойства в классе. Это короткий способ что-то сделать.
Оператор точки, как я видел, всегда используется в экземпляре объекта, тогда как [... ] может использоваться как для экземпляра объекта, так и статически (используя имя класса).
todoTextLabel также может использовать [], но использование оператора точки - это просто более короткая рука ... в противном случае вам пришлось бы указывать параметры и т.д., и это просто более длинные обозначения.
Надеюсь, это помогло.