代码很简单:
@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?
答案 0 :(得分:0)
如果您正在使用ARC,系统会处理内存,并且不会报告为泄漏。这是一篇很好的文章,介绍了ARC以及强引用和弱引用之间的区别。
答案 1 :(得分:0)
我总是对此感到困惑,但是我认为基本上弱是意味着当类被设置为nil时它会消失,而强类不会让类消失,直到var也被删除,因为它有+ 1保留计数开头。
您无法确定哪个会导致泄漏,因为如果使用不当,两者都可能无法正常使用。