iOS не освобождает память для клавиатуры, если она не должна показывать клавиатуру. Есть некоторые обходные пути, которые не совсем фантастичны, но функциональны.
Это решение, которое я использую. Я предварительно загружаю клавиатуру в начале приложения, прежде чем показывать фактическое содержимое моего приложения. Процесс запуска занимает немного больше времени, но по крайней мере мой интерфейс не замерзает, когда я покажу клавиатуру позже.
// Обновление: Apple просто отклонила мое приложение, используя метод, показанный ниже во второй раз, поскольку он иногда запускается на черный экран на симуляторе iPad (а не на устройстве!), Бог знает почему.
AppDelegate.m:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil];
UITextField *lagFreeField = [[UITextField alloc] init];
[self.window addSubview:lagFreeField];
[lagFreeField becomeFirstResponder];
[lagFreeField resignFirstResponder];
[lagFreeField removeFromSuperview];
return YES;
}
- (void)keyboardDidShow:(NSNotification *) notification {
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidShowNotification object:nil];
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 0.2 * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil];
} else {
self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil];
}
self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:self.viewController];
[self.window makeKeyAndVisible];
});
}
Отправка исправлены некоторые проблемы с анимацией, которые я имел, может быть, вам это не нужно. More information on the problem and possible solutions.
Спасибо большое! Это решило его, хотя процесс запуска занимает немного больше времени. Я все еще надеюсь на решение без обходного пути. – konfusius1991