使用C指针订阅Objective-C数组样式?

使用C指针订阅Objective-C数组样式?,objective-c,c,clang,Objective C,C,Clang,我喜欢新的Objective-C订阅: id anotherObject; someObject[2] = anotherObject; 但是对于非对象类型有可能实现它吗?e、 g.void* void *myPointer; someObject[2] = myPointer; 所谓可能,我指的是可能,没有任何优雅的概念。要让您的对象实现索引订阅,您需要实现以下两种方法(用于数字索引): 现在,您可以传递包装您的void*的NSValues,并使用常规NSARRAY,如下所示: myArr

我喜欢新的Objective-C订阅:

id anotherObject;
someObject[2] = anotherObject;
但是对于非对象类型有可能实现它吗?e、 g.
void*

void *myPointer;
someObject[2] = myPointer;

所谓可能,我指的是可能,没有任何优雅的概念。

要让您的对象实现索引订阅,您需要实现以下两种方法(用于数字索引):

现在,您可以传递包装您的
void*
的NSValues,并使用常规NSARRAY,如下所示:

myArray[i] == [NSValue valueWithPointer:myVoidPtr];
myVoidPtr = [myArray[i] pointerValue];
或者使用这些方法的您自己的版本实现您自己的集合,但这将要求您像这样桥接集合的强制转换:

myArray[i] == (__bridge id)myVoidPtr;
myVoidPtr = (__bridge void*)myArray[i];

两者都不能提供非常令人满意的解决方案。NSValue包装方法可以通过几个宏来更好地进行包装和展开,但是您会失去直接索引功能。

为什么不试试呢?顺便说一下,[]用于数组和字典。
myArray[i] == (__bridge id)myVoidPtr;
myVoidPtr = (__bridge void*)myArray[i];