【发布时间】:2012-08-09 19:44:15
【问题描述】:
我正在尝试将 NSString 值从 NSMutableArray 复制到新变量中。 NSString stringWithString 正在返回一个 NSString,其内存地址与我的数组中的对象相同。为什么?
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
@autoreleasepool {
NSMutableArray *arr = [NSMutableArray arrayWithObject:@"first"];
NSLog(@"string is '%@' %p", [arr objectAtIndex:0], [arr objectAtIndex:0]);
// copy the string
NSString *copy = [NSString stringWithString:[arr objectAtIndex:0]];
NSLog(@"string is '%@' %p", copy, copy);
}
return 0;
}
【问题讨论】:
-
不知道为什么会这样,但你试过
NSString *copy = [[arr objectAtIndex:0] copy]; -
我有,结果一样——内存地址匹配。
-
我需要这样做的原因是因为在我的真实应用程序中,数组作为参数传递给我的方法,稍后将被处理。当它被处理时,我丢失了我的 NSString,即使我已经从数组中“复制”了它。
-
那么
NSString * str = [NSString stringWithCString:[[arr objectAtIndex:0] UTF8String] encoding:NSUTF8StringEncoding]; -
@silent__thought:如果这是你真正的问题,那么问题在于你用来“复制”字符串的方法并没有授予你对结果的所有权。
stringWithString:返回一个无主对象。使用copy或alloc/initWithString:获取拥有的版本。指针还是一样的,但是引用计数是正确的并且对象会存活。
标签: objective-c nsstring