我目前正在修复我们SDK中的内存泄漏。我主要在强引用和类方法中获取内存泄漏。由于缺乏对内存管理的理解,我发现很难解决这些泄漏问题。我已经阅读了很多关于内存管理的知识,但仍然无法确定问题出在哪里。所以,我认为我应该首先了解如何通过查看代码来平衡保留/释放。因此,我关掉了ARC进行了一些测试。了解Objective-C中的保留计数使用仪器(泄漏)
这是我的源代码:
ViewController.h
@interface ViewController : UIViewController
@property (nonatomic, assign) IBOutlet UILabel *lLineOne;
@property (nonatomic, assign) IBOutlet UILabel *lLineTwo;
@end
ViewController.m
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
NSString *test = [[NSString alloc] initWithFormat:@"%@ %d", @"Test", 1];
_lLineOne.text = test;
_lLineOne.text = nil;
}
@end
我几乎知道,这肯定会导致泄漏,因为我没有” t得到释放test
。
然后我使用仪器(泄漏)来检查保留/发布列表。这里是我从该字符串的历史
我知道,事件#0也就是的malloc将递增保留计数为1了,再接着通过设置NSString
到的UILabel的财产也会增加保留计数1,所以给我们一个2.我猜CFRetain是在NSString allocInitWithFormat的代码中发生的较低级别的事情,但我不确定为什么它会对另一个+1做出贡献。接下来,在事件#3中保留什么?看起来它是由UILabel引起的,但我真的不知道它到底是什么。
了解。谢谢 –