如果我的班级中有这样的财产:\
@interface Test
NSString *str;
@end
在我的.m init 中:
str = @"Test";
我需要在类 dealloc 中手动释放它吗?
这种呢?
NSString *myStr = [NSString stringWithFormat:@"%@", someString];
我也需要释放它吗?
如果我的班级中有这样的财产:\
@interface Test
NSString *str;
@end
在我的.m init 中:
str = @"Test";
我需要在类 dealloc 中手动释放它吗?
这种呢?
NSString *myStr = [NSString stringWithFormat:@"%@", someString];
我也需要释放它吗?
你真的应该只使用 ARC,但要回答你的具体问题,不:你不需要发布那些。你只释放你“拥有”的东西,你只拥有从包含 [ new
, alloc
, retain
, copy
] 之一的方法中获得的东西。
也就是说,由于您不拥有这些字符串,因此如果您需要保留(或复制)它们,则应该保留它们。
如果您在项目中使用 ARC(自动引用计数),则不必发布。ARC 已为 iOS 5+ 启用,因此如果您的目标是 iOS 5 或更高版本,则无需发布任何内容。
两种构造1创建自动释放的字符串。您需要retain
它们(明确地或通过分配给保留属性),否则一旦调用自动释放2 ,您最终将得到悬空引用。一旦你调用了retain
一个对象,释放它就成为你的责任。
使用 s 的更稳健的方法NSString
是使用copy
属性,而不是保留它们。这样做可以避免在您验证其内容后
NSMutableString
传递给您的方法的方法发生突变时出现的问题。init
retain
或release
显式调用。
2这通常发生在您退出方法后的某个时间,并且控制权会返回给运行循环。
如果您不确定是否使用 ARC,请尝试释放/保留。如果它显示一条警告说您无法释放/保留,则 ARC 已启用,否则已禁用,您必须保留和释放。