Если вы хотите распечатать адрес памяти объекта Objective-C или любого другого указателя, вы должны использовать флаг %p
, а не %@
.Флаг %@
, ожидает строку.
Однако, если аргумент не является строкой, NSLog
автоматически вызовет -description
для переданного объекта.И когда метод возвращает объект NSNull
, -description
этого объекта возвращает строку <null>
NSObject *o = nil;
NSLog(@"%p", o);
Вывод: 0x00000000
NSObject *o = [[NSObject alloc] init];
NSLog(@"%p", o);
[o release];
Вывод: что-то вроде 0x12345678
Mind:
NSNull *n = [NSNull null];
NSLog(@"%p", n);
Вывод: адрес памяти, который всегда будет одинаковым, но будет отличаться от 0x00000000
Правильный способ проверить, являются ли они объектами в массиве, выглядит следующим образом.
NSArray *myArray = [someObject array];
if([myArray isEqual:[NSNull null]]) {
NSLog(@"No objects");
} else {
NSLog(@"%d objects.", (int)[myArray length];
}