Если для ключа не существует объекта, NSDictionary вернет nil
. NSNull
- это реальный объект и, следовательно, отдельная вещь. Это как различие между возможностью записи того, что было значение и значение как ноль, и не записью того, было ли значение. Это также немного зависит от того, как вы мыслите в терминах C косвенности указателя на объект, а не просто на объект, так что это не вполне семантически приятно с этой точки зрения.
В Objective-C вы можете отправить любое сообщение на nil
, и результат гарантированно будет nil
(или 0). Так что, если ваш код предназначен для того, чтобы у вас была безопасная ссылка на объект, как в C ++, тогда то, что вы делаете, не нужно. Составные утверждения, такие как:
object = [[Type alloc] init];
Всегда явно безопасны, даже если alloc не удается и возвращает nil
. Все, что произойдет, это то, что вызов init
вообще ничего не сделает, и объект получит значение nil
, потому что результат отправки init
в nil
также nil
.
При этом ответы Билла и Эммануила должны быть правильными. Сравните ваш результат либо непосредственно с nil
, либо неявно с нулем. Если позже произойдет сбой, я думаю, это потому, что вы ожидаете, что myImageUrl
и myImage
будут типами, отличными от NSString
(я замечаю, что вы использовали id
без шрифта в оригинале код) и отправив им сообщение, на которое они не отвечают.