2015-03-28 3 views
4

Я заметил, что оба array[index] и [array objectAtIndex:index] работают с изменяемыми массивами. Может ли кто-нибудь объяснить разницу между ними? с точки зрения производительности, и какой из них является наилучшей практикой?В чем разница между массивом [index] и [array objectAtIndex: index]?

+1

нет отличие характеристики мудрый. это просто разница в синтаксисе между C и Objective C –

+1

@Osama в этом случае, который не является синтаксисом массива C. Это современный синтаксис Objective-C для доступа к элементу из NSArray. – rmaddy

+0

Нотация, использующая '[]' в «знакомом» (для программистов C) пути, является относительно новой. Есть некоторые различия в деталях piddlin между этим и 'objectAtIndex', но для всех целей и задач они одинаковы. –

ответ

3

Отсутствует. Это часть clang extensions for objective-c literals, добавленная 2-3 года назад.

также:

Массив-Стиль индексация

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

NSUInteger idx = ...; id value = object[idx]; 

Это переводится в вызова objectAtIndexedSubscript:

id value = [object objectAtIndexedSubscript:idx]; 

Когда выражение записывает элемент, используя интеграл индекс:

object[idx] = newValue; 

переводится на призыв setObject:atIndexedSubscript:

[object setObject:newValue atIndexedSubscript:idx]; 

Эти сообщения отправляются затем проверяются и выполняются так же, как явное сообщение . Метод, используемый для objectAtIndexedSubscript:, должен быть объявлен с аргументом целочисленного типа и возвращаемым значением некоторого Тип указателя объекта Objective-C. Метод, используемый для setObject:atIndexedSubscript:, должен быть объявлен с его первым аргументом , имеющим некоторый тип указателя Objective-C, и его второй аргумент, имеющий целочисленный тип .

0

До Xcode 4.4, objectAtIndex: был стандартным способом доступа к элементам массива. Теперь он также доступен через синтаксис подстроки квадратной скобки.

+0

Ему нечего было с Xcode. Это связано с версией clang - компилятором Objective-C.И дело не в доступе к стандартным массивам. Речь идет о доступе к объектам в NSArray. – rmaddy

2

Технически, синтаксис array[index] разрешает вызов метода -objectAtIndexedSubscript: в массиве. Для NSArray это задокументировано как идентичное -objectAtIndex:.

Механизм субтитров может быть распространен на другие классы (включая ваши собственные). Теоретически такой класс мог бы сделать что-то другое для -objectAtIndexedSubscript:, чем для -objectAtIndex:, но это было бы плохой дизайн.

Смежные вопросы