Причина, по которой вы не объявляете NSInteger
с *
, заключается в том, что это не объект. NSInteger - это просто int
или long
:
#if __LP64__
typedef long NSInteger;
#else
typedef int NSInteger;
endif
Если он используется в 32-разрядном приложении, это 32-разрядное целое число, а если он встроен в 64-разрядное приложение, это 64-разрядное целое число.
Конечно, вы можете передать NSInteger
в качестве указателя, но большинство функций просто принимают аргументы как NSInteger
, а не указатель на него.
Объекты, с другой стороны, могут быть переданы другим функциям только в качестве указателей. Это связано с тем, что для объектов динамически выделяется память, и поэтому они не могут быть объявлены в стеке. Поскольку int
или long
имеет фиксированный объем памяти, выделенный для них, это не проблема.