10

次のようなメソッドがある場合:

- (NSDictionary *)removeDataInDictionary:(NSDictionary *)dictionary {

    NSMutableDictionary *mutableDictionary = [dictionary mutableCopy];
    [mutableDictionary removeObjectForKey:@"key"];

    // Return option 1
    return [NSDictionary dictionaryWithDictionary:mutableDictionary];

    // Return option 2
    return (NSDictionary *) mutableDictionary;
}

NSDictionaryオプション1は実際に返されるのに対し、オプション2は実際にNSMutableDictionary偽装して返されるため、コード的には「より良い」NSDictionaryですか?

4

1 に答える 1

5

リターンオプション1は、不変のNSDictionaryオブジェクトを作成します。これは、決して編集したくない場合に使用する方法です。

リターンオプション2はNSMutableDictionaryとにかく戻ります。にキャストしてNSDictionaryも違いはありません

ただし、このメソッドを呼び出すと、が返されることがわかります。NSDictionaryしたがって、外部でそのように見なす必要があるため、オブジェクトクラスを確認してから、メソッドの外部でNSMutableDictionaryにキャストしない限り、外部では不変に見えます。

于 2012-12-20T13:11:55.087 に答える