// 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"]];
在什么情况下,我们需要确定代码中需要使用哪一个。 ??? 任何参考链接的相同之处???
或者有人可以深入回答这个问题吗?
感谢您的帮助。
答案 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做得更好。