对于非保留字符串声明,这三行是否相同?
NSString *list2 = self.map;
NSString *list2 = [NSString stringWithFormat:@"%@", self.map];
NSString *list2 = [NSString stringWithString:self.map];
他们都创建了一个自动释放的字符串对象,对吧?这些方法中是否有首选方法,或者“list2”的内存使用或行为是否存在差异?取决于这些方法?
出于某种原因,我发现在Objective-C中对字符串的操作是与其他语言最混乱的过渡。
答案 0 :(得分:2)
简单的事实,您在上述三种情况下不拥有该对象, 所以你可以使用其中之一, 这与开发人员的选择和绩效有关。
答案 1 :(得分:1)
他们都创建了一个自动释放的字符串对象,对吗?
不,第一个只是将string.map
返回的指针分配给list2
。理论上,第二个和第三个创建您不拥有的新NSStrings
,并将它们分配给list2
。但是,如果string.map
返回一个不可变的字符串,第三个可能给你相同的指针(可能保留和自动释放)。
在所有情况下,您都不拥有(新)字符串。这实际上就是你需要知道的。它们可能是自动释放的,但与您使用它们无关。