Здесь контекст, где я видел это:
NSMutableArray *controllers = [[NSMutableArray alloc] init];
for (unsigned i = 0; i < kNumberOfPages; i++) {
[controllers addObject:[NSNull null]];
}
почему не нуль в этом месте?
Здесь контекст, где я видел это:
NSMutableArray *controllers = [[NSMutableArray alloc] init];
for (unsigned i = 0; i < kNumberOfPages; i++) {
[controllers addObject:[NSNull null]];
}
почему не нуль в этом месте?
Непосредственно из Apple:
Класс NSNull определяет одноэлементный объект, который вы используете для представления нулевых значений в ситуациях, когда nil запрещен как значение (обычно в объекте коллекции, таком как массив или словарь).
Итак, в вашем примере, что именно происходит, программист хочет поместить нулевой объект в массив контроллеров, где nil не разрешено в качестве значения.
Вы не можете добавить значение nil
в NSArray
или NSMutableArray
. Если вам нужно сохранить значение nil
, вам нужно использовать класс оболочки NSNull
, как показано в этом фрагменте. Это указано в documentation.
Коллекционные классы, такие как NSArray
и NSDictionary
, не могут содержать значения nil
. NSNULL
был создан специально как заполнитель для nil
. Он может быть помещен в классы коллекции и занимает только пространство.
NSNULL
определяет одноэлементный объект, что означает, что существует только один экземпляр NSNull (который вы создаете с помощью [NSNull null]
), но он может использоваться как можно больше мест.
Мы все согласны с тем, что [NSNull null] полезен как местозаполнитель, где требуется объект, как это было описано выше. Но если он явно не используется при назначении для вашего объекта, его нельзя использовать в сравнении, ошибку, которую я сделал в прошлом.
id a;
NSLog(@"Case 1");
if (a == nil) NSLog(@"a == nil");
if (a == Nil) NSLog(@"a == Nil");
if ([a isEqual:[NSNull null]]) NSLog(@"a isEqual:[NSNull null]");
NSLog(@"Case 2");
a = [NSNull null];
if (a == nil) NSLog(@"a == nil");
if (a == Nil) NSLog(@"a == Nil");
if ([a isEqual:[NSNull null]]) NSLog(@"a isEqual:[NSNull null]");
Вывод:
2014-01-31 10: 57: 11.179 MCDocsApp [13266: a0b] Случай 1
2014-01-31 10: 57: 11.179 MCDocsApp [13266: a0b] a == nil
2014-01-31 10: 57: 11.179 MCDocsApp [13266: a0b] a == Nil
2014-01-31 10: 57: 11.180 MCDocsApp [13266: a0b] Случай 2
2014-01-31 10: 57: 11.180 MCDocsApp [13266: a0b] a isEqual: [NSNull null]
nil отмечает конец массива после массива объектов...