objective-c - 关于 NSString 的一些初学者问题

标签 objective-c cocoa core-foundation

嘿,我有几个关于 NSString 的问题。

这两种说法有何不同?

NSString *str = @"asdasd";
NSString *str = [[NSString alloc] initWithString:@"asdasd"];

我是否正确地认为另一个是静态字符串,在程序关闭之前不会从内存中释放?我一直使用第二种方法,当我不需要的时候就释放它。有人可以解释一下吗?

最佳答案

理论上,它们是不同的。第一个字符串是常量,无法释放。第二个(同样,理论上)是在堆上分配的,当您使用完它时应该释放。 (这是根据内存管理规则)

但是,在这个特定实例中没有什么区别,因为初始化器只会返回原始字符串。 因为编译器足够聪明,可以看到“啊哈,你正在从常量字符串分配一个不可变对象(immutable对象),因此结果字符串保证与原始常量字符串相同,所以我可以跳过整个分配东西并重新使用常量字符串”。

所以事实证明它们将是相同的字符串。然而,您最初的直觉 react 是正确的,您应该继续遵循它们。 :)

关于objective-c - 关于 NSString 的一些初学者问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4175182/

相关文章:

iphone - 使用 Python 解析 .strings 文件

ios - 如何在 iOS 中阻止 tableview 上的重复字段?

ios - 为 UILabel 增加触摸手势区域

objective-c - 如果在for循环中声明?

objective-c - 为最前面的应用程序生成键盘事件

ios - 无法将表达式的类型 'Void' 转换为类型 'CFAllocator!'

objective-c - 对路径中的变换参数使用 NULL 和 CGAffineTransformIdenity 之间的区别

ios - 代码 : How To Set App To Be iPhone Only?

objective-c - 推荐的文档结构。文件包装器?自己滚?

objective-c - 观察派生属性的变化: CALayer KVO example