В Objective-C, когда я могу использовать примитивный тип данных вместо NSNumber? - PullRequest
2 голосов
/ 05 февраля 2012

Недавно я писал программу на Objective-C и попытался написать следующую часть строки, где 'someString' является экземпляром NSString:

[someString substringFromIndex:3];

Компилятор, кажется, согласен с этим, но я не совсем уверен, почему. Документация по методу substringFromIndex гласит, что параметр должен быть NSUInteger, но не является ли 3 простым примитивным целым числом? Почему я могу это сделать? (Обратите внимание, я новичок в Objective-C, так что я уверен, что рассуждения очень просты или я просто что-то не так.)

Ответы [ 2 ]

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

NSUInteger является typedef'd для примитивного типа. Какой тип зависит от процессора, для которого вы компилируете.

Как видно здесь (и вставлено ниже):

#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64 
    typedef unsigned long NSUInteger;
#else 
    typedef unsigned int NSUInteger;
#endif
4 голосов
/ 05 февраля 2012

NSNumber и NSUInteger - это два разных типа. Как указывает CajunLuke, NSUInteger (например, NSInteger) является определением типа для стандартных примитивных типов Си, но NSNumber является классом объекта. NSNumber и NSInteger / NSUInteger не являются взаимозаменяемыми, но NSInteger / NSUInteger обычно взаимозаменяемы с обычным C int / long.

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