Objective-C не имеет "унифицированной системы типов" в словах CLR. Другими словами, как надмножество C, примитивные типы Objective-C отличаются звери в целом от экземпляров объекта. Тип id
может хранить ссылки (на самом деле указатели во время выполнения OS X / iPhone Objective-C) на любой экземпляр объекта. Примитивные типы C (например, int
, float
и т. Д.) Должны быть заключены в NSValue
или NSNumber
, чтобы их можно было присвоить типу id
. Конечно, это именно то, что делает компилятор C #. Просто в C # вам не нужно явно выполнять (не) преобразование в бокс.
Довольно скоро, код как
float val;
id obj = [NSNumber numberWithFloat:val];
...
float v = [obj floatValue];
станет второй натурой, если, к сожалению, многословно по современным стандартам.