2015-12-23 5 views
1

Общей практикой перед дугой было использование назначения для базовых типов типа int. Что мы должны использовать для них при использовании ARC?Objective-C: атрибут @property для базовых типов

@property (nonatomic,assign) int foo; 

Также: Почему Apple, похоже, поощряет использование NSInteger вместо, например, длинный?

ответ

1

@property (nonatomic,assign) int foo;
по-прежнему используется для примитивов.

ARC останавливает вас от использования retain, как

@property (nonatomic,retain) NSObject *foo;
, подставляя его weak или strong.

И вы хотите использовать NSInteger, потому что это известное количество бит, независимо от того, работаете ли вы на 32- или 64-разрядной архитектуре. int или long может быть зависимым от архитектуры, поэтому он просто дает вам дополнительную предсказуемость/ум.

В предыдущем вопросе есть great discussion about this.

2

Следующая достаточно, так как assign по умолчанию все равно:

@property (nonatomic) int foo;

Что касается NSInteger против int/long: NSInteger является предпочтительным, поскольку он удаляет вас от необходимости беспокоиться о том, что бит-архитектуру вы на, als Leejay уже упоминалось.

Я хочу дополнительно отметить, что использование NSInteger делает его немного легче перейти к swift в будущем, так как NSInteger просто мостиком Int, на самых «родных» типов данных. Если вы используете int в Objective-C, вам нужно иметь дело с Int32 в быстром, то же самое для long (Int64). Просто становится беспорядочным и его можно легко избежать, используя NSInteger для всех свойств и параметров метода или возвращаемых значений.

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