gpt4 book ai didi

ios - 对 "InputModeProperties.plist"的数百次访问滞后于我的游戏 (iPhone)

转载 作者:IT王子 更新时间:2023-10-29 08:01:34 26 4
gpt4 key购买 nike

我有一个关于 Tiny Wings 错误修复的奇怪问题。在我的游戏中,我使用类似的东西:

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];      
[userDefaults setFloat:musicVolume forKey:@"musicVolume"];

用于保存一些偏好和高分表。在游戏结束时出现游戏结束屏幕时,游戏将高分保存到标准用户默认值。在游戏显示如下 UIAlertView 之前它运行良好:

UIAlertView *alert = [[UIAlertView alloc] init];
[alert setTitle:@"Get ready!"];
[alert setDelegate:self];
[alert addButtonWithTitle:@"Ok"];
[alert show];
[alert release];

每次游戏将内容保存到标准用户默认值时 AlertView 消失后,游戏会滞后一段时间(在某些设备上会滞后几秒钟)。在游戏使用 UITextField 输入玩家名称后也会发生这种情况。在使用两个 UIKit 元素之一之前,游戏中没有任何延迟,但在使用它们之后,游戏会延迟,直到我重新启动应用程序。我已经用 Performance Tools 分析了问题,“I/O Activity”Instrument 显示有数百次“打开 - 读取 - 关闭”访问

/System/Library/Frameworks/UIKit.framework/InputModeProperties.plist

这会导致延迟。

我完全不知道该怎么做。有什么想法吗?

编辑:
苹果开发者论坛中有一个帖子http://devforums.apple.com/message/424374#424374有人有同样的问题,似乎它只出现在 iOS 4.3 中。我已经对其进行了测试,延迟只发生在我的 4.3 设备上(而不是在 3.1 iPod Touch 和 4.2 iPad 上)。

最佳答案

编辑

不错的错误解决方法:

简短版本:只是延迟错误触发调用,直到用户不生气为止。

长版:

因为我认为问题来自 [NSUserDefaults standardUserDefaults] 调用,这会触发脏 plist 加载循环 AFTER 某些操作请求键盘布局(如 UIAlert)...

我建议在应用加载时调用 [NSUserDefaults standardUserDefaults] 一次(任何导致错误的调用之前),并保持在所有应用程序生命周期中单例类中返回的引用。我不认为内存占用会很大......(我在几个没有任何问题的应用程序中这样做)。更糟糕的是,plist load*100 只会在应用程序加载时执行一次,而不是在游戏期间执行。

如果问题来自 [userDefaults setXxxx:...] 调用,同样的解决方法,您可以只保留值以保存在内存中,稍后在 userDefaults 中设置它们,就像就在同步之前他们...但是如果出现任何问题,比如崩溃,就有丢失信息的风险。我个人更喜欢在每次设置之后sync以确保数据完整性...

ENDOFEDIT


简短的回答:iOS4.3 错误,很少有机会找到解决方法...报告错误并等待下一次 iOS 更新...2 周后的 WWDC...1~2 个月。

长的:

在查看了 UIKit 的组装后,这是我的猜测:

  • InputModeProperties.plist 包含按区域设置的所有键盘布局的列表。
  • UIKit 将其用于多种用途,例如显示键盘时,以确定可用的键盘布局。 (语言环境...)
  • 有一件事很有趣,我们可以在 NSUserDefaults 中找到它的一些信息:

    NSLog(@"%@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
    ==> {
    AppleKeyboards = ( // I have two keyboard in preferences
    "fr_FR@hw=French;sw=AZERTY", // french first
    "en_US@hw=US;sw=QWERTY" // english second
    );
    ...
  • 但与您的分数不同,这些信息并未存储在应用首选项中。 ( NSGlobalDomain, or more likely Separate domains for each of the user’s preferred languages )
  • 所以我不会对 UIKit + NSUserDefaults 中存在导致脏 plist 加载循环的冲突(错误)感到惊讶。
  • 你说大约有 100 个电话?这类似于 plist 中语言环境/布局的数量!

NSUserDefaults 中没有可用的键盘时...(就像在同步之后,让我们想象一个这样做的错误)... UIKit 可以尝试所有可用的键盘来确定用户一,肮脏地解析这个 4.4K plist 一百次......就像在显示 UIAlertView 时......在 NSUSerDefault 同步/更改之后。

谁知道呢?拥有源代码的 Apple 人员 :)

我不会惊讶地去偏好设置键盘而不是默认的美国然后恢复到美国会解决这个问题。对你的情况没用,但会确认这个问题。看到另一个 4.3 错误...

正如其他人所说,不使用 NSUserDefaults 而是在/Documents 中使用一个简单的自定义 plist 可能是一个(不)体面的解决方法。

Tiny Wings 很棒! :)

关于ios - 对 "InputModeProperties.plist"的数百次访问滞后于我的游戏 (iPhone),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6024245/

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