Fro*_*ost 1 cocoa objective-c nsstring
我对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];
Run Code Online (Sandbox Code Playgroud)
我不太熟悉Obj-C的对象行为,它就像C++一样吗?
如果是这样,我怎么能安全地完成作业
string str = "hi";
string str2 = str;
Run Code Online (Sandbox Code Playgroud)
在C++中表现?
例如:我在.h文件中声明了一个字符串,
如何安全地分配它在函数结束后不会变为NULL?
我知道这是一个非常基本的问题,但我在NSString参考页面找不到答案.
非常感谢任何帮助!
这种行为不仅仅是C++.对象是引用计数的.如果你想保留一个,你必须对它提出要求.
如果您使用名称中包含该单词的方法自己创建对象alloc
,new
或者copy
您已拥有所有权.这就像一个C++ new
.(当你创建了一个对象时alloc
,你还需要用一些名称开始的方法初始化它init
.但是你必须先创建它.在C++中,这两个东西都被认为是单一构造行为的一部分.)
您从其他方法(例如您提到的三种NSString方法中的两种)接收的对象只是暂时可用,除非您通过调用明确声明所有权[object retain]
.如果你想让它们超越直接上下文,你只需要这样做.(在C++中,实际上没有相同的东西.)
无论您获得所有权,都必须在通过电话完成后放弃它[object release]
.这类似于C++ delete
,除了在释放所有所有权声明之前实际上没有销毁该对象.
掌握这一点真的非常重要,也许是使用Objective-C时唯一需要知道的重要事项.仔细阅读对象所有权文档,您将进行排序.