Объективные c ключевые операторы пути @ avg, @ max - PullRequest
2 голосов
/ 04 апреля 2010
arr = [[NSMutableArray alloc]init];
[arr addObject:[NSNumber numberWithInt:4]];
[arr addObject:[NSNumber numberWithInt:45]];
[arr addObject:[NSNumber numberWithInt:23]];
[arr addObject:[NSNumber numberWithInt:12]];
NSLog(@"The avg = %@", [arr valueForKeyPath:@"@avg.intValue"]);

Этот код работает нормально, но почему? valueForKeyPath:@"@avg.intValue" запрашивает (int) от каждого NSNumber, но мы выводим строку% @ в журнале. Если я пытаюсь вывести десятичное число% d, я получаю число, которое, возможно, является указателем на что-то. Может кто-нибудь объяснить, почему целые числа становятся NSNumbers, когда я вызываю оператор @avg?

Ответы [ 2 ]

1 голос
/ 04 апреля 2010

valueForKeyPath: должен вернуть объект (его тип возврата id), поэтому вы получаете NSNumber или NSValue (я не уверен, какой; это зависит от того, дает ли intValue int или NSNumber, и (если первое) как результат связывается обратно в объект), несмотря на intValue. По той же причине вы не можете хранить не объекты в коллекциях.

1 голос
/ 04 апреля 2010

Оператор @avg возвращает экземпляр NSNumber. Если вы используете %d, вы напечатаете адрес памяти экземпляра NSNumber. Когда вы используете %@, с другой стороны, экземпляру NSNumber отправляется сообщение description, а полученный NSString печатается.

См. Операторы Set и Array в Руководстве по программированию кодирования значения ключа для получения дополнительной информации о @avg и других операторах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...