所以我写了这段代码:
NSString *str1=@"string 1";
NSString *str2=@"string 2";
NSLog(@"str2 is: %@", str2);
str2=[str1 stringByAppendingString:str2];
NSLog(@"str2 is: %@",str2);
它给出了以下输出:
2015-03-01 17:11:16.600 er [956:32910] str2是:string 2
2015-03-01 17:11:16.601 er [956:32910] str2是:string 1string 2
所以str2现在指向内存中的不同位置。有没有办法访问旧的指针str1或立即杀死它?
答案 0 :(得分:1)
通常不会,在为对象指针指定新值后,旧对象会被释放。如果还有其他指针,它将保留在内存中。因此,如果你想保持一个对象,请保留一个指向它的指针。
添加
NSString *oldStr2 = str2;
在重新分配str2之前你保留它。否则你无法知道对象是留在内存中还是消失了。如果它留在内存中你不知道它在哪里,因为你没有指向它的指针。
即使你能以某种方式找到这个对象而没有引用它仍然是更好的代码,以明确你以后想要通过设置一个新的引用再次访问它。
对于常量字符串,例如在您的示例中有例外。那些内置于可执行文件中并始终可用 - 它们无法消失。但如果你没有指针,你仍然无法再访问它们。