2010-02-01 2 views
1

Можно ли сказать, что при использовании целых чисел при программировании на iphone вы их не синтезируете и что их не выпускаете.Объект c целые числа iphone

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

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

+0

Какие ошибки? ___ – kennytm

ответ

2

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

@property(assign) int X; 
5

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

@property(assign) int x;

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

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

+2

Ухх ... вы должны '@ синтезировать', потому что вы объявили его как' @ property' ... –

+0

@Dave: Нет, вы также можете '@ dynamic'. – kennytm

+0

@Dave DeLong: хорошая точка, спасибо - не совсем проснулся :) – Tim

1

Если вы объявляете свое целое число как «NSInteger» или примитивный int 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 из подписанного или unsigned char, short int, int, long int, long long int, float, double или BOOL. Среди них NSNumber может использоваться только в коллекциях, таких как NSArray, где требуется объект, но NSInteger не может использоваться там напрямую.

2

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

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

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

+0

+1 отличные баллы –

Смежные вопросы