【问题标题】:NSString stringWithString VS @"string"NSString stringWithString VS @"string"
【发布时间】:2012-11-02 08:02:14
【问题描述】:

我只是好奇,下面两个代码有什么区别吗?

NSString *aString = [NSString stringWithString:@"a string"];

NSString *aString = @"一个字符串";

我想知道当你使用后一种方式时到底发生了什么。

【问题讨论】:

    标签: iphone objective-c ios cocoa


    【解决方案1】:

    两者都指向在编译时创建的文字字符串。

    即使 stringWithString 建议它是自动释放的,文字字符串也永远不会被释放。

    在这里查看我的相关帖子:

    Difference between NSString literals

    来自苹果文档@https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Strings/Articles/CreatingStrings.html

    这样的对象是在编译时创建的,并且存在于你的整个 程序的执行。编译器使此类对象常量唯一 在每个模块的基础上,它们永远不会被释放,尽管你可以 像处理任何其他对象一样保留和释放它们。

    【讨论】:

    • 嗯...按照通用规则[NSString stringWithString:@"a string"] 应该返回“字符串”的自动发布副本。 Bryanmac,您能否发布一个描述您的答案的链接?
    • 我猜它会返回一个自动发布的保留版本的文字 @a string" 传入,但指向一些文档的链接会有所帮助。
    • 我添加了指向创建字符串苹果文档的链接。它不能被释放,因为它指向编译成二进制的文字字符串在内存中的偏移量。请参阅我的相关帖子,说明这一点。
    • BTW,不是不能发布,只是发布没有效果。它基本上不受 ref 计数的影响,因为它是字面的并且永远存在。
    猜你喜欢
    • 1970-01-01
    • 2011-03-17
    • 2012-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-02
    • 2014-06-06
    相关资源
    最近更新 更多