Как я знаю, что возвращаемое значение ноль означает для метода objectForKey NSDictionary в Objective C? - PullRequest
1 голос
/ 05 февраля 2012

Документация для NSDictionary говорит, что метод objectForKey возвращает nil, если NSDictionary не содержит ваш ключ; однако, разве ноль не равен нулю? Если так, как я узнаю, означает ли возвращаемое значение, что словарь содержит ключ, сопоставленный с нулем, или этот ключ просто не существует?

Ответы [ 2 ]

7 голосов
/ 05 февраля 2012

NSDictionaries (и, действительно, все объекты коллекции Какао) могут содержать только объекты Objective-C, но не примитивы C, такие как int. Поэтому, если бы вы хранили 0 в словаре, вы бы сделали это так:

[myDictionary setObject:[NSNumber numberWithInt:0] forKey:@"myKey"];

и, следовательно, его получение будет выглядеть так:

NSNumber* resultObj = [myDictionary objectForKey:@"myKey"];
if (resultObj == nil)
{
    //Key didn't exist
}
else
{
    int result = [resultObj intValue];
    //Now do your work.
}

Эта концепция «оборачивания» примитива C в объект для сохранения его в коллекции, а затем «разворачивания» его на другом конце очень распространена в Какао. (Вы также можете заглянуть в NSValue, если пытаетесь работать с нечисловыми значениями.)

2 голосов
/ 05 февраля 2012

Отредактировано: Хотя направление в памяти NULL и nil указывает на то, что должно быть 0x0, и оно всегда было и может быть всегда, вы не можете использовать это значение для другие цели, кроме определения неопределенного адреса в памяти. В случае NULL это означает неопределенный указатель. nil означает неопределенный указатель объекта. Идея, лежащая в основе этих #define s, заключается в том, что для программистов и программ существует жесткий стандарт, позволяющий знать и передавать неопределенные адреса в памяти, и он может измениться на 0x42 в новом компиляторе или стандарте, и НИЧЕГО не должно произойти. Так что не думайте nil или NULL как 0; да, но это просто случайность. Это не особенность. nil не совпадает с 0. nil - указатель объекта, 0 - числовое значение

...