В В 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.