0

我喜欢新的 Objective-C 下标:

id anotherObject;
someObject[2] = anotherObject;

但是是否可以为非对象类型实现它?例如void *

void *myPointer;
someObject[2] = myPointer;

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

4

1 回答 1

0

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

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

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

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

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

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

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

于 2013-05-01T13:10:18.627 回答