1

如果我的班级中有这样的财产:\

@interface Test

NSString *str;

@end

在我的.m init 中:

str = @"Test";

我需要在类 dealloc 中手动释放它吗?

这种呢?

NSString *myStr = [NSString stringWithFormat:@"%@", someString];

我也需要释放它吗?

4

4 回答 4

2

你真的应该只使用 ARC,但要回答你的具体问题,不:你不需要发布那些。你只释放你“拥有”的东西,你只拥有从包含 [ new, alloc, retain, copy] 之一的方法中获得的东西。

也就是说,由于您不拥有这些字符串,因此如果您需要保留(或复制)它们,则应该保留它们。

于 2012-09-27T21:47:54.300 回答
1

如果您在项目中使用 ARC(自动引用计数),则不必发布。ARC 已为 iOS 5+ 启用,因此如果您的目标是 iOS 5 或更高版本,则无需发布任何内容。

于 2012-09-27T21:44:54.530 回答
1

两种构造1创建自动释放的字符串。您需要retain它们(明确地或通过分配给保留属性),否则一旦调用自动释放2 ,您最终将得到悬空引用。一旦你调用了retain一个对象,释放它就成为你的责任。

使用 s 的更稳健的方法NSString是使用copy属性,而不是保留它们。这样做可以避免在您验证其内容后 NSMutableString传递给您的方法的方法发生突变时出现的问题。init


1我假设您询问的是 Objective C 工具的 pre-ARC 版本;否则,您将无法调用retainrelease显式调用。

2这通常发生在您退出方法后的某个时间,并且控制权会返回给运行循环。

于 2012-09-27T21:48:04.363 回答
1

如果您不确定是否使用 ARC,请尝试释放/保留。如果它显示一条警告说您无法释放/保留,则 ARC 已启用,否则已禁用,您必须保留和释放。

于 2012-09-27T21:55:18.890 回答