由.xib或.m设计

时间:2011-05-14 05:57:42

标签: iphone objective-c

友 我有一个应用程序,十页,但充满了按钮(带有背景图像),大尺寸背景图像,一组控件的框图像等。我已经设计了所有这些XIB文件。它工作正常,但几分钟后,我的应用程序显示“已接收内存警告级别= 1”。一些开发人员建议我使用.m文件进行设计,而不是在XIB文件中进行。他们告诉它会减少图形的内存使用量。

这是真的吗?将.m文件设计会减少内存使用量吗?请指教,谢谢。

3 个答案:

答案 0 :(得分:4)

您是否检查过应用中是否有内存泄漏? XIB文件仅使用恒定的内存量。此外,在代码中创建相同的接口会消耗几乎相同的内存量。

在任何情况下,一旦加载XIB,它就只消耗一定量的内存。 因此,如果您在加载XIB之后没有立即收到内存警告,但之后几秒钟,导致内存警告的真正原因肯定是其他地方。

您正确地执行了retainrelease吗?从Xcode运行静态分析器,删除所有报告的警告,然后使用Instruments查看是否有内存泄漏。

答案 1 :(得分:0)

在Nib文件中设计UI,或者在代码中手动执行相同操作,对内存消耗没有任何影响。最终结果是内存中生命对象的数量相同,Nib文件只是序列化对象,没有其他魔法。

Nib-files和Interface Builder只允许您通过拖放更快地设计UI,而不是代码中的反复试验。 Nib文件附带的所有奖金价格都很低;你必须打扰自己至少阅读有关如何使用它们的文档!否则你会遇到麻烦。你可以打赌,任何提出反对Nib文件的人都不知道他们是什么或者他们是如何工作的,并且也不会费心去学习。

转到http://developer.apple.com并搜索“nib”,您希望至少阅读“核心竞争力 - Nib文件”“Nib对象的内存管理”< / em>的。然后确定Nib文件是否适合您手头的任务。

答案 2 :(得分:-3)

是的,你应该在代码中做到这一点。但是,如果您收到内存警告,那真的没关系。在创建另一个内容之前,您必须删除页面上的内容,否则它与仅使用.xib文件相同。事实上,我曾经制作了一个有很多窗口的应用程序,我得到了相同的内存警告信息。

实际上很容易找出原因(当我听到时我感到很惊讶)。基本上,.xib文件中的每一件事都是一个对象。当你有很多对象时,你的内存不足。您需要做的是在更改页面时运行类似于te的代码。

- (void) changeToPageOne {
    [theSecondElement release];
    //Then you make the new interface element
    UIImageView *theElement = [[UIImageView alloc] initWithFrame:(CGRect)];
    //You will need the coordinates from the .xib file for the CGRect there
    [theElement setImage:(UIImage*)];
    [theView addSubview:theElement];
}

你为下一页做同样的事情。这里的问题是你需要能够跟踪UIImageView,但它基本上只是一个局部变量。您可能希望将其添加到数组中,并在更改页面时删除数组中的对象。我希望这有帮助!