Подтвердить что ты не робот

Существуют ли NSDouble, NSFloat или другие типы, кроме NSInteger?

В В Cocoa вы предпочитаете NSInteger или просто обычный int, и почему?, упоминалось NSDouble и NSFloat, но я не может видеть ссылку для тех, кто находится в любой документации. Если цель NSInteger предназначена для архитектурной безопасности, как насчет других типов, таких как double или float?

4b9b3361

Ответ 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.