哪种情况应该导致内存泄漏?

时间:2012-06-10 17:44:22

标签: ios

代码很简单:

@interface Test : NSObject
@property (nonatomic, strong) NSString * str;  //strong
//@property (nonatomic, weak) NSString * str;  //weak
-(void)func;
@end

@implementation Test
@synthesize str = _str;
-(void)func{
   _str = @"test string";       // using ivar
   //self.str = @"test string"; // using setter
}
@end

上面的代码中存在four个情况,强/弱,ivar / setter

哪些类型会导致内存泄漏?

哪些类型相同?

我用NSLog测试代码但是一切运行良好(没有打印),为什么?也许是关于autorelease

--------------编辑---------------

我阅读了该文档并发现“字符串常量永远不会被释放”

因此,当字符串使用initWithString或initWithFormat初始化时(与我编写的代码错误),代码行为不同

使用initWithFormat

时,weak属性始终为nil

用于内存管理ivar和setter是相同的:Is self.iVar necessary for strong properties with ARC?

2 个答案:

答案 0 :(得分:0)

如果您正在使用ARC,系统会处理内存,并且不会报告为泄漏。这是一篇很好的文章,介绍了ARC以及强引用和弱引用之间的区别。

http://www.quora.com/Objective-C-programming-language/In-Objective-C-whats-the-difference-between-a-strong-and-weak-pointer

答案 1 :(得分:0)

我总是对此感到困惑,但是我认为基本上弱是意味着当类被设置为nil时它会消失,而强类不会让类消失,直到var也被删除,因为它有+ 1保留计数开头。

您无法确定哪个会导致泄漏,因为如果使用不当,两者都可能无法正常使用。