首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从现有指针构建指针数组

从现有指针构建指针数组
EN

Stack Overflow用户
提问于 2012-12-23 01:54:15
回答 1查看 1.8K关注 0票数 0

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

代码语言:javascript
复制
NSNumber *a = nil;
NSNumber *b = nil;
NSNumber *c = nil;

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

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

代码语言:javascript
复制
NSPointerArray *objs = [NSPointerArray weakObjectsPointerArray];
[objs addPointer:&a];
[objs addPointer:&b];
[objs addPointer:&c];

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

代码语言:javascript
复制
error: address doesn't contain a section that points to a section in a object file

我如何构建一个可以用这样的循环探索的数组呢?

代码语言:javascript
复制
    for (id *o in objs) {
        *o = @2;
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-23 02:01:08

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

代码语言:javascript
复制
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是不可变的)

代码语言:javascript
复制
#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);
}
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14005151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档