【发布时间】:2014-07-17 18:26:56
【问题描述】:
我的应用在主线程上加载 5 个UIButton(其中 2 个使用自定义图像)、一个UITextView 和一个UITextField,作为对按钮按下的反应。在 iPad 2 上进行测试需要几秒钟,但只是第一次。在那之后,即使在释放所有内容之后,它的加载速度也会快得多。对我来说,iPad似乎首先必须释放一些非活动内存才能加载我的东西。我可以以某种方式提前请求更多可用内存以加快速度吗?
解决方案: 由于问题是由键盘引起的,因此这是最适合我的解决方案:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Preloads keyboard so there's no lag on initial keyboard appearance.
UITextField *lagFreeField = [[UITextField alloc] init];
[self.window addSubview:lagFreeField];
[lagFreeField becomeFirstResponder];
[lagFreeField resignFirstResponder];
[lagFreeField removeFromSuperview];
}
我还稍微延迟了我的 RootView 的添加,因此延迟不会弄乱我一开始在那里进行的动画。
【问题讨论】:
-
您从哪里加载自定义图像?
-
这里的瓶颈是从磁盘加载图像。您应该将它们加载到另一个
dispatch_queue或NSOperation -
根据各种 cmets 的说法,这可能是释放内存之外的其他事情:您没有证据支持该结论,优化应该始终是有证据的。使用 Instruments 找出真正的瓶颈是什么。
标签: ios objective-c ipad memory