字符串声明和赋值:3种方法

时间:2011-06-16 13:31:05

标签: iphone objective-c string nsstring

对于非保留字符串声明,这三行是否相同?

NSString *list2 = self.map;

NSString *list2 = [NSString stringWithFormat:@"%@", self.map];

NSString *list2 = [NSString stringWithString:self.map];

他们都创建了一个自动释放的字符串对象,对吧?这些方法中是否有首选方法,或者“list2”的内存使用或行为是否存在差异?取决于这些方法?

出于某种原因,我发现在Objective-C中对字符串的操作是与其他语言最混乱的过渡。

2 个答案:

答案 0 :(得分:2)

简单的事实,您在上述三种情况下不拥有该对象, 所以你可以使用其中之一, 这与开发人员的选择和绩效有关。

浏览Memory Management Programming Guide

答案 1 :(得分:1)

  

他们都创建了一个自动释放的字符串对象,对吗?

不,第一个只是将string.map返回的指针分配给list2。理论上,第二个和第三个创建您不拥有的新NSStrings,并将它们分配给list2。但是,如果string.map返回一个不可变的字符串,第三个可能给你相同的指针(可能保留和自动释放)。

在所有情况下,您都不拥有(新)字符串。这实际上就是你需要知道的。它们可能是自动释放的,但与您使用它们无关。