Когда использовать скобки и когда использовать период в Objective C

Я - огромный сторонник кода по SPROC's. Причины номер один сохраняют код сильно связанным, тогда вторым является простота управления исходным кодом без большого количества пользовательских утилит для втягивания его.

В нашем DAL, если у нас есть очень сложные SQL-операторы, мы обычно включаем их как файлы ресурсов и обновляем их по мере необходимости (это могло быть отдельным блоком также, и выгруженный на дБ, и т.д....).

Это сохраняет наш код и наши вызовы sql сохраненными в том же управлении версиями, не "забывая" запускать некоторые внешние приложения для обновления.

15
задан Stephen Darlington 15 October 2009 в 16:02
поделиться

5 ответов

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.

28
ответ дан 1 December 2019 в 01:11
поделиться

Я использую точечную нотацию для свойств, потому что

for ( Person *person in group.people){ ... }

немного легче читать, чем

for ( Person *person in [group  people]){ ... }

, во втором случае читаемость прерывается переводом вашего мозга в режим отправки сообщений, тогда как в В первом случае ясно, что вы обращаетесь к свойству people объекта группы.

Я также буду использовать его при изменении коллекции, например:

[group.people addObject:anotherPerson];

немного читабельнее, чем

[[group people] addObject:anotherPerson];

. быть в действии добавления объекта в массив вместо объединения двух сообщений.

5
ответ дан 1 December 2019 в 01:11
поделиться

Big У Nerd Ranch есть некоторые мысли по поводу точечной записи, которые стоит прочитать.

Есть также опровержение .

3
ответ дан 1 December 2019 в 01:11
поделиться

По (строгому) соглашению средства доступа к свойствам записываются как методы, названные по имени переменной экземпляра для получателя, а имя переменной экземпляра (с заглавной буквы) с префиксом "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 ключевые слова для генерации геттеров и сеттеров. Вы можете смешивать и сопоставлять их с точечной нотацией - одно не требует другого.

2
ответ дан 1 December 2019 в 01:11
поделиться

Да, я тоже только начал изучать это:

В отличие от других языков, синтаксис для вызова метода объекта не objName.someMethod ();

Это [objName someMethod]

Оператор с точкой используется для получения или установки значения свойства в классе. Это короткий способ что-то сделать.

Оператор точки, как я видел, всегда используется в экземпляре объекта, тогда как [... ] может использоваться как для экземпляра объекта, так и статически (используя имя класса).

todoTextLabel также может использовать [], но использование оператора точки - это просто более короткая рука ... в противном случае вам пришлось бы указывать параметры и т.д., и это просто более длинные обозначения.

Надеюсь, это помогло.

0
ответ дан 1 December 2019 в 01:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: