【问题标题】:How to handle an array of pointers in Objective-C如何在 Objective-C 中处理指针数组
【发布时间】:2010-05-17 17:15:22
【问题描述】:

我想出了这个问题的答案,但我在这里找不到解决方案,所以将它发布给后代。

那么,在 Objective-C 中,如何从指针创建对象,以便将其存储在 Objective-C 集合(NSArray、NSDictionary、NSSet 等)中,而无需恢复为常规 C?

【问题讨论】:

  • 后代......和声誉! ;)
  • 嘿,我猜。我没有太多空闲时间来回答别人的问题,但是当我自己遇到有趣的答案时,我喜欢回馈。
  • 嘿蒂姆,我想保留“C”标签。我知道这个问题是关于objective-c的,但它也特别是关于“C”答案的替代品。

标签: c objective-c cocoa cocoa-touch pointers


【解决方案1】:
NSValue *pointerObject = [NSValue valueWithPointer:aPointer];

这会将指针包装在一个 NSValue 中。稍后使用 NSValue 的实例方法 (pointerValue:) 将其取出来

【讨论】:

    【解决方案2】:

    另一种解决方案是定义一个类,该类具有访问/操作指针内容的方法,然后将其实例添加到数组中。

    不要打扰 NSValue 的子类化,因为它确实对解决方案没有任何帮助。

    类似:

    @interface FooPtr:NSObject
    {
        void *foo;
    }
    
    + fooPtrWithFoo: (void *) aFoo;
    
    .... methods here ...
    @end
    

    我特别选择了一个不透明的 (void *),因为它告诉客户“不要直接触摸我的内脏”。在实现中,做#define FOOPTR(foo) ((Foo *) foo)之类的事情,然后你可以在你的各种方法中根据需要FOOPTR(foo)->bar;

    这样做也使得在底层数据类型之上添加特定于 Objective-C 的逻辑变得微不足道。排序只是实现正确方法的问题。哈希/字典条目现在可以对 foo 的内容等进行哈希处理...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-11
      • 1970-01-01
      • 2010-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-24
      相关资源
      最近更新 更多