В настоящее время я изучаю Objective-C. Что именно означают квадратные скобки вокруг вещей и есть ли разница между их использованием и использованием точки (я из мира .NET, поэтому для меня это было бы проще).
Спасибо.
В настоящее время я изучаю Objective-C. Что именно означают квадратные скобки вокруг вещей и есть ли разница между их использованием и использованием точки (я из мира .NET, поэтому для меня это было бы проще).
Спасибо.
Они оба делают одно и то же в вашем примере. .
— это своего рода сокращение, используемое для доступа к свойству объекта. []
используются для отправки сообщения объекту. В вашем примере это одно и то же. Вы заметите разницу, если попытаетесь отправить сообщение, которое не связано напрямую с именем свойства.
Например: [myString length]
и myString.length
одинаковы, но если вы хотите установить длину (давайте предположим, что это имеет смысл для примера), вам нужно будет сделать что-то вроде [myString setLength:newLength]
или myString.length = newLength
. Кроме того, есть сообщения, которые не совпадают с именами свойств, как в этом примере:
[myString stringByReplacingOccurrencesOfString:@"hello" withString:@"world"];
который не имеет значимого эквивалента с использованием сокращения .
.
myArray.count;
действительно делает [myArray count];
.
- person Rudy Velthuis; 16.03.2012
void
, вы бы видели код, подобный myObject.method;
? Weeeeerd.
- person Carl Norum; 16.03.2012
Objective-C использует сообщения, а не методы, и это основной синтаксис (точечный синтаксис был введен как альтернатива простым сообщениям get/set). Очевидно, что между методами и сообщениями есть существенные сходства, но также и различия.
В Objective-C объекты имеют полную гибкость в ответе на сообщение во время выполнения. Они могут обработать совершенно неожиданное сообщение, например, передав его другому объекту. Или вы можете делать такие вещи, как сопоставление сообщений со столбцами во время выполнения. Это основано на наследии, восходящем к Smalltalk.
Только .NET просто получил такую гибкость благодаря dynamic
/DynamicObject
/IDynamicMetaObjectProvider
. Конечно, в любом языке имена методов/сообщений, определенные во время компиляции, обычно более уместны. Но есть примечательные варианты использования динамических.
Конечно, Objective-C является надмножеством C, поэтому .
используется для других вещей (обычно структур или объединений).