我有代码来交换两个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
答案 0 :(得分:0)
不,你没有(不能)交换对象的地址。
对象始终存在于堆中,无法移动。您可以移动内容,但不能移动对象。
您所做的是交换spt1
和spt2
的值。但是,spt1
和spt2
(即&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);