Objective-C 数组风格的 C 指针下标?

标签 objective-c c clang

我喜欢新的 Objective-C 下标:

id anotherObject;
someObject[2] = anotherObject;

但是可以为非对象类型实现它吗?例如无效*

void *myPointer;
someObject[2] = myPointer;

所谓的“可能”,我真正的意思是“可能”,没有任何优雅的概念。

最佳答案

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

- (id)objectAtIndexedSubscript:(NSUInteger)idx;
- (void)setObject:(id)obj atIndexedSubscript:(NSUInteger)idx;

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

myArray[i] == [NSValue valueWithPointer:myVoidPtr];
myVoidPtr = [myArray[i] pointerValue];

或者使用这些方法的您自己的版本来实现您自己的集合,但这将需要您像这样桥接传入和传出集合:

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

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

关于Objective-C 数组风格的 C 指针下标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16318323/

相关文章:

iphone - 在某个时间创建表示 "today"的 NSDate 对象

objective-c - 使用 localizedStandardCompare 对 NSURL 进行排序的性能

c - 必须在主函数中调用 pthread_create() 和 pthread_join() 吗?

c++ - 在固定宽度的消息计数器中检测回绕的好方法是什么?

c++ - 用于二进制分发的 clang 编译器标志(通用 CPU)

iphone - 使用 performSelector :withObject:afterDelay: with non-object parameters

ios - 如何将对对象的引用传递给导航 Controller 中包含的模态呈现的 View Controller ?

c - 在c中返回一个数组来计算数字

c++ - 为什么使用 std::mutex 的函数会对 pthread_key_create 的地址进行空检查?

gcc - 这个乘加代码的奇怪优化结果