让我尝试更详细地解释它:
.h
您在文件中有一个字符串变量。在视图中确实加载了您将其分配为:
test = [NSString stringWithFormat:@"sample"];
这段代码中实际发生的是您的测试是一个自动释放的对象。当你使用 this 和 object 时alloc
,init
this 是自动释放的对象,将在你占用它的方法后释放内存。
为了避免这种情况,您可以通过创建属性来使用@Mehul 的解决方案。这违背了封装概念。有时你有一些你不想在类之外访问的对象,或者不想与对象一起显示。在这些情况下使用以下内容:
test = [[NSString stringWithFormat:@"sample"] retain]; // or
test = [[NSString alloc] initWithFormat:@"sample"];
这将使您的字符串保持活力,直到您释放它。
还有一种方式不好用,但是想告诉大家,让大家更好的理解。使用
test = @"sample";
如果您不想附加字符串或将其与格式一起使用,您可以将简单字符串分配给您的NSString
对象。
使用它会有无限retainCount
的测试变量。您可以使用它来避免崩溃,但这不是可取的,因为正如我所说的那样,retaiCount
您无法释放它并在使用后释放内存。所以早期的方法更正确。
这适用于所有使用类方法创建的自动释放对象,而不是使用init
.
希望这会让你更清楚。