1

Objective C では、C++ 言語と同じように、オブジェクトをオブジェクトに代入すると、次のようなポインティング アドレスが取得されます。

object1 = object2;

したがって、上記のオブジェクトの 1 つを変更すると、他のオブジェクトに影響します。

これは MutableCopy でも同じですか? copy と MutableCopy の違いは何ですか?

ディープコピーを行うには?

4

2 に答える 2

2

Objective Cは とは異なるメモリ管理モデルがあるC++ため、単純に削除することはできませんfirstString。それへの強い参照をすべて削除する必要があります。その場合、強い参照を作成します。再割り当てsecondStringすると、別のオブジェクトを指します。NSString不変もそうです。

可変コピーは別の文字列オブジェクトを作成し、それを変更できます

于 2015-04-30T14:52:45.380 に答える
1

はい、mutableCopy (およびコピー) はディープ コピーです。

次のテスト コードを参照してください。

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    NSString *string1 = @"string1";
    NSString *string2 = string1;

    NSLog(@"Test 1(%p, %p): String 1: %@; String 2: %@", string1, string2, string1, string2);

    string1 = nil;

    NSLog(@"Test 2(%p, %p): String 1: %@; String 2: %@", string1, string2, string1, string2);

    string1 = string2;

    NSLog(@"Test 3(%p, %p): String 1: %@; String 2: %@", string1, string2, string1, string2);

    string2 = [string1 mutableCopy];

    NSLog(@"Test 4(%p, %p): String 1: %@; String 2: %@", string1, string2, string1, string2);




}

次の出力が生成されます。string2 が string1 に割り当てられている場合、メモリの場所は同じであることがわかります。テスト 4 では、mutableCopy の後、メモリの場所が変更されます。

2015-04-30 11:07:30.359 TestStuff[9425:2555886] Test 1(0x103021068, 0x103021068): String 1: string1; String 2: string1
2015-04-30 11:07:30.359 TestStuff[9425:2555886] Test 2(0x0, 0x103021068): String 1: (null); String 2: string1
2015-04-30 11:07:30.359 TestStuff[9425:2555886] Test 3(0x103021068, 0x103021068): String 1: string1; String 2: string1
2015-04-30 11:07:30.359 TestStuff[9425:2555886] Test 4(0x103021068, 0x7f9a23d71b30): String 1: string1; String 2: string1
于 2015-04-30T15:11:08.710 に答える