交换两个ObjectiveC对象的地址

时间:2015-09-14 23:51:04

标签: objective-c

我有代码来交换两个NSString对象的地址, 但输出完全出乎意料。 任何人都可以解释为什么我不能交换两个对象的引用。

    NSString* spt1 = @"spt1";
    NSString* spt2 = @"spt2";

    NSLog(@"spt1=%p", &spt1);
    NSLog(@"spt2=%p", &spt2);

    NSString* stmp = spt1;
    spt1 = spt2;
    spt2 = stmp;

    NSLog(@"spt1=%p", &spt1);
    NSLog(@"spt2=%p", &spt2);

输出:

spt1=0x7fff53f5d208
spt2=0x7fff53f5d200
swap: spt1=0x7fff53f5d208
swap: spt2=0x7fff53f5d200

1 个答案:

答案 0 :(得分:0)

不,你没有(不能)交换对象的地址。

对象始终存在于堆中,无法移动。您可以移动内容,但不能移动对象。

您所做的是交换spt1spt2。但是,spt1spt2(即&spt1&spt2)的地址保持不变。

请尝试使用此代码。您可以看到值已交换但不是地址。

NSLog(@"spt1=%p, &spt1=%p", spt1, &spt1);
NSLog(@"spt2=%p, &spt2=%p", spt2, &spt2);

NSString* stmp = spt1;
spt1 = spt2;
spt2 = stmp;

NSLog(@"spt1=%p, &spt1=%p", spt1, &spt1);
NSLog(@"spt2=%p, &spt2=%p", spt2, &spt2);