我的应用加载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,所以滞后不会搞砸我在开始时就会进行的动画。
答案 0 :(得分:1)
第二次延迟是您的应用首次显示键盘。你可以做一些调整来弥补这种延迟,但它们最多也是不优雅的。
这不是由于您的代码或分配您的对象内存,而是苹果公司这样做的方式(在您的应用永远不使用键盘的情况下节省内存)。
Check this link out and read more like it.您将了解问题和可能的解决方法。
答案 1 :(得分:1)
假设char是1个字节,并且1兆字节中有1 048 576个字节,您可以使用以下代码
int megaBytesNeeded = 1; // For more memory, run allocation in a loop
size_t size = sizeof(char) * 1048576 * megaBytesNeeded;
char *array = malloc(size);
memset(array, 0, size); // Actually use memory, iOS allocates lazily
free(array);
但这不是你应该使用的解决方案。我认为您应该打开Instruments.app并使用时间分析器来查看导致故障的原因。选择时间段(导致故障)并查找占用大量时间的选择器。
答案 2 :(得分:0)
不要假设任何事情。使用仪器描述您的应用程序,看看发生了什么。
您所看到的很可能是图像缓存。如果使用imageNamed加载图像,系统会在下次加载图像时对其进行缓存。
但是,我不会认为是这种情况。使用仪器。