gpt4 book ai didi

iphone - UIButton 内存管理 - 如何管理它?

转载 作者:行者123 更新时间:2023-11-28 19:14:47 25 4
gpt4 key购买 nike

在我看来,我有将近 45 个 UIButton,我知道按钮没有分配给内存,编译器以某种方式分配/释放它,但我注意到设备在这个 View ,所以...我应该怎么做才能避免 UIButton 内存不足??

下面是我如何将我的按钮放入我的 View 中:

在 myView.h 中:

UIButton *btn1;

在 myView.m 中:

btn1 = [UIButton buttonWithType:UIButtonTypeCustom];
[btn1 setTitle:@"btn1" forState:UIControlStateNormal];
[btn1 addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];
btn1.backgroundColor = [UIColor clearColor];
btn1.frame = CGRectMake( arc4random() % 920, arc4random() %600+50 , 65, 65);
[self.view addSubview:btn1];

以及我如何删除它:

for(UIButton* b in [self.view subviews]){
[b removeFromSuperview];
b = nil;

}

最佳答案

内存泄漏本身不会显着降低您的应用程序速度。它们的作用是填满内存,如果数量足够,操作系统将由于内存使用过多而终止您的应用程序。 (如果操作系统没有终止您的应用程序,那么您的速度可能会变慢,但由于它终止了应用程序,所以没问题)。

无论如何,如果您担心内存泄漏,您可以触发 Instruments 并查看它是否在显示 View 时检测到任何内存泄漏。

您查看速度慢的原因可能是必须将 45 张图像加载到内存中,然后从磁盘读取它们(这很慢)。您可能会考虑预加载它们,看看这是否会有所改善。

预加载图像的一种简单方法是通过 imageNamed 实例化它:

 UIImage* img = [UIImage imageNamed:@"myButton1.png"];

您可以为所有按钮调用该方法,并在您可以调用的另一个方法中收集所有相关调用,例如,在启动时,或在对您有意义的任何其他时刻。

编辑:

when i enter the view and exit and reenter the view and so on

请注意:您不需要从它们的 super View 中删除按钮(在正常情况下):这将在删除 super View 时由框架完成。这可能会降低应用程序的速度吗?

此外,如果在退出/进入 View 时出现问题,您能否尝试“缓存”整个 View (例如:只实例化一次,然后在需要时显示它)。

关于iphone - UIButton 内存管理 - 如何管理它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12953268/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com