2012-02-12 2 views

ответ

7

Это указатель на указатель на NSError. Он используется как «параметр out» - или вы можете подумать об этом как о указателе на экземпляр NSError, считая, что экземплярвсегда является указателем.

Вы можете использовать его как это:

NSError * outError = nil; << reserve place and a name for the out parameter 

// pass the error so the client may return it to you: 
BOOL ret = [obj checkResourceIsReachableAndReturnError:&outError]; 

if (nil != outError) { << the error was set in checkResourceIsReachableAndReturnError: 
    NSLog(@"Error: %@", outError); << log it 
} 
… 

На стороне реализации, это выглядит следующим образом:

- (BOOL)checkResourceIsReachableAndReturnError:(NSError**)outError 
{ 
    if (self.isThingReachable) { 
    // okay - the caller may not be interested in the error, test it: 
    if (0 != outError) { 
     // they are interested this time! 
     *outError = [NSError errorWithBlahBlahBlah]; 
    } 
    return NO; 
    } 

    return YES; 
} 
1

Вы называете это, отправив ссылку на NSError*, например, так:

NSError *myError = NULL; 
[foo checkResourceIsReachableAndReturnError:&myError]; 
if (myError) { 
    /* look through info, handle error, etc. */ 
} 

Метод -checkResourceIsReachableAndReturnError: может изменить указатель myError , включая выделение пространства для нового NSError. Это позволяет вам легко проверить, была ли ошибка, просто проверив, является ли myError не NULL.

1

Отметьте это сообщение в блоге: "Using NSError To Great Effect" и обратите особое внимание на раздел «Передача указателей на указатели».

Также на странице wiki на указателях есть раздел на "Multiple Indirection"

Смежные вопросы