【问题标题】:Objective-C Array-Style Subscripting with C pointers?带有 C 指针的 Objective-C 数组样式下标?
【发布时间】:2013-05-01 12:44:33
【问题描述】:

我喜欢新的 Objective-C 下标:

id anotherObject;
someObject[2] = anotherObject;

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

void *myPointer;
someObject[2] = myPointer;

可能我的意思是可能的,没有任何优雅的概念。

【问题讨论】:

  • 你为什么不试试呢?顺便说一下 [] 用于数组和字典。

标签: objective-c c clang


【解决方案1】:

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

- (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 包装方法可以更好地使用几个宏来进行包装和展开,但您会失去直接索引。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-29
    • 1970-01-01
    • 2013-12-20
    • 1970-01-01
    相关资源
    最近更新 更多