4

经过 5 年的 Java 经验后,我开始学习 Objective-C,但不了解它的一些结构。这个 Some_Object** 是什么意思?例如在这里的方法定义中:

- (NSString *)checkLastUpdate:(NSUInteger)loggedId   
 returnMsgs:(NSMutableArray **)returnMsgs
 {
       ....
if (returnMsgs) 
 {
*returnMsgs = NewMsgs;
}
     }

它是指向指针的指针还是什么?使用它的原因是什么?

4

3 回答 3

7

它是指针对指针的类型,在 C 语言中也是如此。

除了错误回调之外,我认为这不是一个好的行为。例如,我们调用一个函数并需要错误信息以防函数失败:

- (id)handleData:(NSData *)inData error:(NSError **)outError;
{
if (inData == NULL || [inData length] == 0)
    {
    if (outError)
        *outError = [NSError errorWithDomain:kDataErrorDomain code:-1 userInfo:NULL];

我们可以这样调用:

NSError *error = NULL;
[self handleData:data error:&error];

if (error) {
    // Handle error
于 2013-02-27T09:29:34.477 回答
2

NSMutableArray ** 表示它是一个容器,可以保存包含 NSMutableArray 的引用地址,例如

NSMutableArray * obj1; //obj1 can store reference of a mutable array
NSMutableArray ** obj2; // can contain address of obj1 that can store reference of a mutable array

您可以在不同的场景中使用它最重要的是

  • 如果要从函数返回多个对象(可以是错误对象或其他对象)
于 2013-02-27T09:24:57.103 回答
0

这里函数将双指针 NSMutableArray 作为输出参数,并期望 NSMutableArray 实例将被初始化为 nil

我认为以下是在这里使用双指针的用例,

-(void)functionName{  
NSMutableArray *pArray = nil;  

NSString *update = [self checkLastUpdate:[self getLoggId] returnMsgs:&pArray ];

}
于 2013-02-27T09:24:59.337 回答