以下NSString赋值调用之间的基本区别

时间:2012-05-03 06:17:39

标签: objective-c nsstring nsobject

// Directly assigning the value.
NSString *str = [objDictionary objectForKey:@"attributeName"];

// Assigning with convenience method
NSString *str = [NSString stringWithFormat:@"%@", [objDictionary objectForKey:@"attributeName"]];

// Assigning after being owner to that object.
NSString *str = [[NSString alloc] initWithString:@"%@", [objDictionary objectForKey:@"attributeName"]];

在什么情况下,我们需要确定代码中需要使用哪一个。 ??? 任何参考链接的相同之处???

或者有人可以深入回答这个问题吗?

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

NSString *str = [objDictionary objectForKey:@"attributeName"];

这是您希望使用分配了自动释放内存的本地变量的声明     即你不必担心内存分配/释放。

NSString *str = [NSString stringWithFormat:@"%@", [objDictionary objectForKey:@"attributeName"]];

当您需要在单个字符串中组合不同类型时,此方法很有用     即带字符串的整数/浮点数     例如

NSString *str = [NSString stringWithFormat:@"%@ and %d", [objDictionary objectForKey:@"attributeName"], 5];

这将导致'你的价值和5'

NSString *str = [[NSString alloc] initWithString:@"%@", [objDictionary objectForKey:@"attributeName"]];

这是您分配内存的分配,您需要让该变量使用其他位置,因此除非您释放该变量的内存,否则它将存在。     确保在分配内存时,您自己释放内存,因为您是负责任的内存。

对于进一步的详细研究,我建议您访问documentation获取NSString,它将为您提供有关可用的类/实例方法以及如何使用的信息。

答案 1 :(得分:2)

假设您的词典包含一个字符串,在ARC下,这些都是相同的。通过手动引用计数,前两个是自动释放的,最后一个是保留的。

对于参考指南,您不能比NSString class reference做得更好。