不知怎的,我在模拟器(运行条形图)中看到内存增加。
我有一个名为MyObject
的对象,除了int
之外什么都没有。在其他一些类中(比如MyCar.h中的MyCar
)我有一个MyObject
的数组,例如MyObject* junk[8];
以及通过索引返回特定的方法:
-(MyObject*) getJunk:(int) index{
if(junk[index] == nil){
return nil;
}
return junk[index];
}
在另一个名为DataModel
的课程中,我有MyCar *mycar;
DataModel
中我调用方法ask
-(void) ask{
if(mycar == nil){
return nil;
}
for(int i=0;i<8;i++){
if( [mycar getJunk:i] == nil){
continue;
}
}
}
我每次打电话[self ask]
说10,000次。我正在使用ARC,但我注意到每次iOS内存条都会上升。所以有些东西在积累记忆;我不知道是什么,我没有alloc
。是的,即使我编写了这样无用的代码,而这些代码对返回到数据模型的junk[i]
没有任何作用,也会发生这种情况。
我甚至尝试过
-(void) ask{
if(mycar == nil){
return nil;
}
for(int i=0;i<8;i++){
MyObject* temp_junk = [mycar getJunk:i];
if( temp_junk == nil){
continue;
}
temp_junk = nil;
}
}
答案 0 :(得分:0)
如果您在循环中调用[self ask]
10000次,请执行以下操作:
for (int = 0; i < 10000; i++)
[self ask];
然后你在循环中累积自动释放的对象 - 在循环结束并且主运行循环刷新自动释放池之前,这些对象不会被释放。尝试在循环中创建自己的自动释放池,如下所示:
for (int i = 0 ; i < 10000; i++)
{
@autoreleasepool
{
[self ask];
}
}
每次循环时都会创建一个新池,每次都刷新它,这样那些自动释放的对象就会消失。