1

次のような方法がある場合:

-(NSArray *)methodThatReturnsAnArray;

そして、これはその実装です:

-(NSArray *)methodThatReturnsAnArray {

    NSMutableArray *aMutableArray = [[NSMutableArray alloc] init];
    [aMutableArray addObject:@"some string"];
    return aMutableArray;
}

Objective-C は返されたときに暗黙的にキャストaMutableArrayNSArrayますか、それとも次のように指定する必要がありますか。

    return (NSArray *)aMutableArray;
4

4 に答える 4

3

NSMutableArrayは のサブクラスなNSArrayので、型キャストを行う必要はありません。それは教科書のサブタイプ多型です。

于 2012-10-28T22:35:50.880 に答える
2

一般的なオブジェクト指向言語の継承と同様に、クラスからNSMutableArray拡張されるため、 IS Aはまったく効果があります。NSArray NSArray

NSArrayすでに であるため、 にキャストする必要はありませんNSArray。実際には、 が応答できるすべてのメッセージにNSArray応答できるため、it の代わりに使用できます

于 2012-10-28T22:35:25.440 に答える
0

NSMutableArrayオブジェクトは のサブクラスであるため、単純にオブジェクトを返すことができますNSArray

ただし、変更可能な配列であることに注意してください。通常、これは問題ではありませんが、変更できないことを確認したい場合は、新しいインスタンスまたはコピーを作成する必要があります。

return [NSArray arrayWithArray:aMutableArray];
于 2012-10-28T22:34:47.803 に答える
0

キャストはオブジェクトの型を変更しません。特定のタイプのオブジェクトであると想定する必要があることをコンパイラに伝えるだけです。しかし、 a(NSArray *)aMutableArrayは a のままNSMutableArrayです。

于 2012-10-28T22:36:01.543 に答える