2015-02-12 3 views
1

Как предполагает Apple, нам необходимо проверить индекс NSArray перед вызовом objectAtIndex:. Для этого мы можем использовать класс или метод swizzling.Проверка индексов массива при использовании литерального подписи

Для этого синтаксиса индексного,

index = 1; 
id person = pArray[index]; 

есть способ осуществить это? Конечно, я могу проверить index заранее.

+2

Вы хотите проверить это для * каждого * массива без отказа? Это добавит много накладных расходов и, безусловно, не будет необходимости в большинстве случаев (например, при итерации по диапазону или когда счет проверяется один раз после получения массива из сети или аналогичного) – JustSid

ответ

1

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

Редактировать: Еще одна мысль о накладных расходах, NSArray уже делает это, проверяя внутренне и выдает исключение, когда оно выходит из строя. Может быть, упаковка некоторых блоков кода в блоках @try/@catch, где это разумно, имеет для вас больше смысла?

+0

ah, objectAtIndexedSubscript - это то, что я хочу ~ – scorpiozj

+0

Не нужно заботиться о том, почему происходит исключение, и, следовательно, отказаться от использования @ try/catch. Если индекс выходит за пределы допустимого диапазона, он получает нулевой объект, который будет безопасным даже при отправке не найденного селектора. – scorpiozj