В В Cocoa вы предпочитаете NSInteger или просто обычный int, и почему?, упоминалось NSDouble
и NSFloat
, но я не может видеть ссылку для тех, кто находится в любой документации. Если цель NSInteger
предназначена для архитектурной безопасности, как насчет других типов, таких как double
или float
?
Существуют ли NSDouble, NSFloat или другие типы, кроме NSInteger?
Ответ 1
NSInteger
существует, поскольку тип int
изменяется в размере между 32-битными и 64-разрядными системами. float
и double
не меняются по размеру одинаково, поэтому нет необходимости иметь для них типы обертки.
Ответ 2
Нет NSFloat
, но я знаю, что Core Graphics API в конечном итоге изменился с float
на CGFloat
, чтобы он мог использовать double
на некоторых архитектурах.
Лучше всего использовать точные типы, которые объявляют заголовки API. Это автоматически изменяет тип, если вы когда-либо перекомпилировали свой код для другой цели.
Ответ 3
Это также о соглашениях.
Значение typedef для int несовместимо с int int.
Пример: pid_t имеет тип int, но передача int создаст предупреждение.
Почему? Поскольку вы хотите быть уверенным, что если вы пересекаете границы API, все знают, чего ожидает код.
Существуют плавающие и двойные типы, т.е. NSTimeInterval. Это не относится к базовому типу, но к соглашению придерживаться.
Если вы объявляете локальный int как счетчик циклов, и вы не планируете передавать его в хорошо определенный API, это нормально, чтобы вызвать int int.