В чем разница между setObject:forKey setObject:forKeyedSubscript

#objective-c #nsmutablearray

#objective-c #nsmutablearray

Вопрос:

Есть ли какая-либо разница между методами setObject:forKey и setObject:forKeyedSubscript ?

Я использую Objective-C NSMutableArray . Мне кажется, что оба они функционируют одинаково.

Ответ №1:

setObject:forKeyedSubscript: и setObject:atIndexedSubscript: используются для изменяемых методов подписки на коллекции, введенных с литералами Objective C.

setObject:forKeyedSubscript: используется для изменяемых коллекций в стиле словаря. Вы не должны использовать его с коллекциями в стиле массива.

Больше информации здесь.

Ответ №2:

В документации говорится:

«Этот метод идентичен setObject:forKey:».

Комментарии:

1. Возможно, вы могли бы объяснить, почему это тогда существует?

2. Или, по крайней мере, предоставьте документацию.

3. Он используется для обеспечения поддержки литералов. Если я пишу myDict[@"key"] = @"bob"; , то Objective-C вызывает setObject:forKeyedSubscript метод следующим образом: [myDict setObject:@"bob" forKeyedSubscript:@"key"]; . Теперь имеет смысл?

4. Он утверждает, что он идентичен, но setObject:forKeyedSubscript: допускает nil значения (что удаляет ключ и значение из словаря), тогда как setObject:forKey: вызовет NSInvalidArgumentException , если вы передадите ему nil значение!