objective-c - 从现有指针构建指针数组

标签 objective-c cocoa pointers

我有一个类,它必须以相同的方式初始化一组相似的对象。

NSNumber *a = nil;
NSNumber *b = nil;
NSNumber *c = nil;

a、b 和 c 是现有对象的成员变量。在我的代码中,我使用了更复杂的 NSObject 子类,但使用 NSNumbers 这个示例更容易理解。

所有 3 个对象必须以类似的方式初始化。因此我想构建一个指针数组,我可以在 for 循环中使用它,如下所示:

NSPointerArray *objs = [NSPointerArray weakObjectsPointerArray];
[objs addPointer:&a];
[objs addPointer:&b];
[objs addPointer:&c];

运行上面的代码我收到以下错误:

error: address doesn't contain a section that points to a section in a object file

如何构建一个可以通过这样的循环进行探索的数组?

    for (id *o in objs) {
        *o = @2;
    }

最佳答案

只需将指针包装在“NSValue”对象中就可以了

id v1 = [NSValue valueWithPointer:p1];
id v2 = [NSValue valueWithPointer:p2];
id v3 = [NSValue valueWithPointer:p3];

id array = @[v1,v2,v3];

for(NSValue *value in array) {
    void *pointer = value.pointerValue;
    NSNumber *n = (__bridge NSNumber*)pointer;
}

演示您想要做的事情,它出现:(NSNumbers 是不可变的)

#import <Foundation/Foundation.h>

int main(int argc, char *argv[]) {
@autoreleasepool {
    NSNumber *a;
    NSNumber *b;

    NSArray *os = @[ [NSValue valueWithPointer:&a],
                 [NSValue valueWithPointer:&b] ];

    for (NSValue *v in os) {
        void *pointer = [v pointerValue];
        NSNumber **n_ptr = (__bridge NSNumber**)pointer; 
        *n_ptr = @2.0;
    }

    NSLog(@"%@ %@", a,b);
}
}

关于objective-c - 从现有指针构建指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14005151/

相关文章:

要传递给 C 函数的 Objective-C 选择器指针

ios - 在现有项目中添加/引用其他项目

xcode - NSTextField 的 "Value With Pattern"绑定(bind)中的条件显示模式

C++ 有人知道更多关于这种指针的信息吗?

c - 如何将乘法运算符与指针一起使用?

iphone - 键盘打开时在 ScrollView 中滚动(就像在 Notes 应用程序 iOS 中一样)

objective-c - 无法识别Objective-C类

iPhone 内存管理和释放

gmail 原子提要的 cocoa 格式 NSURL 字符串

c++ - 如何在 C++ 中发送二维数组作为引用,然后返回?