gpt4 book ai didi

objective-c - 对 NSString *str 感到困惑

转载 作者:行者123 更新时间:2023-12-03 16:49:20 24 4
gpt4 key购买 nike

我对 NSString *str 的行为感到有点困惑..

我用多种方式分配它,有时它有效,有时它变成空。

NSString *str = @"/hi/hello"; // this one always works
// this sometimes becomes null after the function ends
NSString *str2 = [str lastPathComponent];
// as above
NSString *str3 = [NSString stringWithString:str2];
NSString *str4 = [NSString initWithString:str3];

我不太熟悉 Obj-C 的对象行为,它和 C++ 一样吗?

如果是这样,我怎样才能安全地完成作业

string str = "hi";
string str2 = str;

在 C++ 中表现如何?

例如:我在 .h 文件中声明一个字符串,

如何安全地分配它,使其在函数结束后不会变成NULL?

我知道这是一个非常基本的问题,但我在 NSString 引用页中找不到答案。

非常感谢您的帮助!

最佳答案

其行为不仅仅像 C++。对象是引用计数的。如果您想保留一个,则必须对其提出 claim 。

如果您自己使用名称包含单词 allocnewcopy 的方法自行创建对象,那么您就已经拥有所有权。这就像 C++ new。 (当你使用 alloc 创建了一个对象时,你还需要使用一些名称以 init 开头的方法来初始化它。但是你必须先创建它。在 C++ 中,这两件事将被视为单一施工行为的一部分。)

从其他方法(例如您提到的三个 NSString 方法中的两个)接收的对象仅暂时可用,除非您通过调用 [object keep] 明确声明所有权。仅当您希望将它们保留在当前上下文之外时,才需要执行此操作。 (C++ 中并没有真正的等效项。)

无论您如何获得所有权,您都必须在完成后通过调用[对象释放]放弃它。这有点像 C++ delete,只不过对象在所有所有权声明都被释放之前不会被真正销毁。

掌握这一点真的非常非常重要,也许这是使用 Objective-C 时需要知道的唯一重要的事情。阅读object ownership documentation仔细一点,你就会被分类。

关于objective-c - 对 NSString *str 感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3088917/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com