целые числа iphone - PullRequest
       21

целые числа iphone

1 голос
/ 01 февраля 2010

Верно ли говорить, что при использовании целых чисел при программировании для iphone вы не синтезируете их и не выпускаете их?

Если это правда, может кто-нибудь объяснить, почему?

Я получаю ошибки каждый раз, когда пытаюсь. Кроме того, если я установил @property для целочисленного значения, я тоже получаю ошибки

Ответы [ 4 ]

5 голосов
/ 01 февраля 2010

В Objective-C int является примитивным типом, тогда как NSNumber (или другие подобные вещи) являются объектами. Примитивные типы, поскольку они не поддерживают многие вещи, которые делают объекты (например, методы getter и setter), могут быть объявлены только

@property(assign) int x;

Точно так же вы не освобождаете их, потому что это подразумевает, что вы отправляете сообщение -release примитиву, который не поддерживает обмен сообщениями. Вы можете @synthesize или @dynamic их, но только если вы дадите им соответствующее (назначенное) свойство.

Краткая версия: примитивы типа int не имеют сообщений или методов. Не пытайтесь дать им немного.

2 голосов
/ 01 февраля 2010

Два комментария:

  • NSNumber намного медленнее, чем, скажем, int. В общем, если вы можете избежать использования скалярных значений, сделайте это.

  • При определении свойств используйте «неатомные», где это возможно. Это позволяет значительно улучшить производительность (с некоторыми рисками, конечно, если у вас есть несколько потоков, действующих на него).

2 голосов
/ 01 февраля 2010

Вы можете синтезировать int -s. Но вы должны объявить их как assign -properties:

 @property(assign) int X;
1 голос
/ 01 февраля 2010

Если вы объявляете свое целое число как NSInteger или примитив int в стиле C, то то, что вы говорите, верно. Но нет, если вы используете класс NSNumber. Позвольте мне объяснить:

NSInteger не является классом Objective-C. Это не более чем синоним целого числа. NSInteger определяется следующим образом:

#if __LP64__ || NS_BUILD_32_LIKE_64
  typedef long NSInteger;
  typedef unsigned long NSUInteger;
#else
  typedef int NSInteger;
  typedef unsigned int NSUInteger;
#endif

NSNumber - это класс Objective-C и подкласс NSValue. Можно создать объект NSNumber из знака или без знака char, short int, int, long int, long long int, float, double или BOOL. Среди них NSNumber может использоваться только в коллекциях, таких как NSArray, где требуется объект, но NSInteger не может использоваться там напрямую.

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