如何使用方法更改指针?

时间:2011-01-08 19:36:14

标签: objective-c pointers indirection

我正在使用目标C开发iPhone应用程序。我已经有了A类,它创建了一个名为“list”的NSMutableArray指针。但是,在A类中,我从不创建一个指向它的对象。相反,我在类B中调用类方法,从sqlite数据库中获取一些数据,并在那里填充NSMutableArray对象。我希望能够通过将它作为参数传递给方法,将类A中的指针设置为指向在B类方法中创建的NSMutableArray对象。我不能通过返回数组来完成它,因为我想返回sqlite结果。

我想知道我做得对吗?我还没有写完整个方法(当它完成时它会很长),但我想知道在开始其余的工作之前我是否正确地做了指针。

//ClassA.m

//...
NSMutableArray *list;
[ClassB populateArrayFromSqlite:&list];
//Now do stuff with "list", which should point to the array created in populateArrayFromSqlite
//...

//ClassB.m
+(int)populateArrayFromSqlite:(NSMutableArray**)ar {
    NSMutableArray *array = [[NSMutableArray alloc] init];
    //Here there will be code that populates the array using sqlite (once I write it)
    //And then I need to set the "list" pointer in ClassA.m to point to this array
    ar = &array; //Is this how?

    return resultFromSqlite;
}

我做得对吗?或者我不明白什么?我想这个指向指针的东西只是没有点击我。在阅读了几个关于指针的一般来源之后,我怀疑这是我怎么做的,但是我的一部分不明白为什么ar参数不能只是一个常规指针(而不是一个指向指针的指针)

2 个答案:

答案 0 :(得分:6)

指针的指针有点escheric,是的。这样做的简单方法是在A中创建一个空数组,并将一个常规数组指针传递给B,它只会填充它。如果你坚持在B中创建数组,我想你可以这样做:

- (void) createArray: (NSMutableArray**) newArray
{
    NSAssert(newArray, @"I need a pointer, sweetheart.");
    *newArray = [[NSMutableArray alloc] init];
    [*newArray addObject:...];
}

答案 1 :(得分:2)

在Objective-C中更改指向此类对象的指针非常罕见。我们看到这样的东西的主要时间是当一个方法有可能失败时,此时我们将传入指向NSError引用的指针。例如,NSFileManager的{​​{1}}。

更常见的方法是让方法返回数组:

- (BOOL)removeItemAtPath:(NSString *)path error:(NSError **)error