1 iphone memory-leaks objective-c instruments
嗨,我有这个代码来初始化我的课程.
- (id)initWithSize:(int)size {
self = [super init];
if( self != nil )
{
[self setMyVector:[[NSMutableArray alloc] initWithCapacity:size]];
for ( int i = 0; i < size; i++ )
{
[myVector addObject: [[NSMutableArray alloc] initWithCapacity:size]];
}
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
我在仪器中得到了这个漏洞!
类别:CFArray(store-deque)
事件类型:Malloc
任何人都知道我需要解决它吗?谢谢 !
泄漏在你的for循环中,也可能在之前.
首先,这一行:
[self setMyVector:[[NSMutableArray alloc] initWithCapacity:size]];
如果setMyVector保留传递的数组(根据惯例,它可能应该),那么你已经泄漏了数组.首先,分配并初始化数组.它的保留计数为+1.然后将其设置为myVector实例变量,这意味着它的保留计数为+2.当你将其他东西放入myVector中,或者你在dealloc方法中释放myVector变量时,你将减少保留计数,这意味着它的保留计数为+1.换句话说,它不会被释放,你已经泄漏了数组.
另一个确定的泄漏在你的for()循环中,你有:
[myVector addObject: [[NSMutableArray alloc] initWithCapacity:size]];
同样,您创建一个保留计数为+1的数组,然后将其添加到myVector数组,该数组将再次保留它(+2).但是,你不再有一个指向数组的指针,所以你已经泄露了它.
这两个泄漏都可以通过使用[NSMutableArray arrayWithCapacity:size]而不是alloc/init方法来解决.这将创建一个自动释放的数组,这将解决您的内存泄漏.
如果您不知道自动释放是什么,那么您可能需要考虑创建数组并将其存储到局部变量中,将其添加到myVector(或将其设置为myVector),然后立即释放它.
| 归档时间: |
|
| 查看次数: |
1020 次 |
| 最近记录: |