我正在开发一个类似信息亭的幻灯片应用。我有一个
工厂类使用的方法大致如下:
我还没有定义所有的情况,但已填写的那些似乎会导致内存使用跳跃。如果在switch/case之前添加
一些需要注意的事项:
当应用程序启动时,我看到内存从大约400千字节稳定到大约两倍。然后,当幻灯片进展时,任何包含在花括号中的生成代码的幻灯片都会被调用,内存再次稳定。这种行为似乎只发生一次 - 当应用程序循环遍历所有幻灯片时,不会再次稳定。但是,如果将应用程序置于后台,然后重新启动,平台会再次出现,甚至消耗更多内存。
当我让应用程序运行过夜大约10个小时40分钟时,内存使用量从大约1.44兆字节缓慢上升到接近1.57兆字节。我怀疑还有其他泄漏问题可能已经通过我的调整得到解决,但是从大约800千字节到1.4到1.5兆字节的主要跳跃仍然存在问题。
Instruments没有报告任何泄漏,但平台问题让我担忧。
是什么导致了内存增加?
所以我认为这不是块的问题,因为使用 if/else 似乎可以做同样的事情。以下是运行中的分配工具的截图:
UIScrollView
,用于显示幻灯片,还有一个工厂类,用于生成幻灯片。这些“幻灯片”本身是UIViewController
子类,从XIB文件中加载并由工厂类进行自定义。在我的主视图控制器中,我设置了滚动视图并启动了一个计时器。该计时器每N秒调用一次“reload”方法,处理重新加载和对工厂类的调用。工厂类使用的方法大致如下:
- (SlideViewController *)slideFromManagedObject:(Slide *)managedObject{
NSInteger slideType = [managedObject slideType];
switch(slideType){
case kSlideTypeA:
{
//
// configure arguments here
//
return [[SlideViewController alloc] initWithArgument:argument] autorelease];
break;
}
//
// More types here...
//
default:
break;
}
}
我还没有定义所有的情况,但已填写的那些似乎会导致内存使用跳跃。如果在switch/case之前添加
return [[[UIViewController alloc] init] autorelease];
,就像预期的那样看不到可见视图,但也看不到那些内存增加。我不确定,但我怀疑是将我的幻灯片生成代码包装在"C块"中。一些需要注意的事项:
当应用程序启动时,我看到内存从大约400千字节稳定到大约两倍。然后,当幻灯片进展时,任何包含在花括号中的生成代码的幻灯片都会被调用,内存再次稳定。这种行为似乎只发生一次 - 当应用程序循环遍历所有幻灯片时,不会再次稳定。但是,如果将应用程序置于后台,然后重新启动,平台会再次出现,甚至消耗更多内存。
当我让应用程序运行过夜大约10个小时40分钟时,内存使用量从大约1.44兆字节缓慢上升到接近1.57兆字节。我怀疑还有其他泄漏问题可能已经通过我的调整得到解决,但是从大约800千字节到1.4到1.5兆字节的主要跳跃仍然存在问题。
Instruments没有报告任何泄漏,但平台问题让我担忧。
是什么导致了内存增加?
所以我认为这不是块的问题,因为使用 if/else 似乎可以做同样的事情。以下是运行中的分配工具的截图:
这些观点可能在哪里保留?
willDisappear
方法中做了什么? - falconcreekalloc
init
,默认幻灯片不会增加内存使用量。 - falconcreek