yo diría uintptr_t uso estándar C99 para enteros de tamaño de puntero. La definición de NSInteger parece suficientemente turbia para que no se pueda garantizar que tenga un puntero.
Use NSInteger donde la API lo usa, si es necesario. Pero mucho tiempo servirá para todos los propósitos prácticos.
Al mirar NSObjCRunTime, realmente no entiendo la motivación para su definición actual. ¿Probablemente tener un tipo entero lo suficientemente grande como para ir, por ejemplo, a la cantidad máxima de elementos en un NSArray?
#if __LP64__ || (TARGET_OS_EMBEDDED && !TARGET_OS_IPHONE) || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
typedef unsigned long NSUInteger;
#else
typedef int NSInteger;
typedef unsigned int NSUInteger;
#endif
duplicado posible de [Al utilizar NSInteger vs int?] (Http://stackoverflow.com/questions/4445173/when-to-use-nsinteger-vs-int), [Cómo convertir a NSInteger int] (http://stackoverflow.com/questions/1752701/), o [¿Por qué hay un NSInteger] (http://stackoverflow.com/questions/5870867/), solo tres [entre muchos] (http://stackoverflow.com/search?q=nsinteger+int). –