4

私はJavaで5年の経験を積んだ後、Objective-Cを学び始めましたが、その構造のいくつかを理解していません。このSome_Object**はどういう意味ですか?たとえば、ここのメソッド定義では、次のようになります。

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

ポインタへのポインタですか、それとも何ですか?そして、これを使用する理由は何ですか?

4

3 に答える 3

7

それはPointer -to-pointer型で、C 言語でも同じことです。

エラー コールバック以外は良い動作だとは思いません。たとえば、1 つの関数を呼び出し、その関数が失敗した場合に備えてエラー情報が必要です。

- (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 に答える