iOS模拟器是否可以更像真正的iPhone?

5

苹果的iOS模拟器很棒 - 我经常使用它,因为它比在真实设备上运行要容易得多。当然,它也有一些缺点,其中之一就是它太过强大了。由于它可以访问计算机的资源,我经常发现在iOS模拟器上运行良好(流畅)的代码并不总是在真实设备上运行流畅,例如我的iPhone 4。

这个问题的标题已经说得很清楚了,但我还是再说一遍:是否有可能使iOS模拟器像真实的iOS设备一样运行?

4个回答

4
你可以使用“nice”或“renice”命令来降低模拟器的调度优先级,但除非同时运行其他更高优先级的任务,否则这可能不会有太大帮助。
个人认为,你最好花时间熟悉在设备上运行的方式。这并不难,而且你将获得更好的了解你的应用程序的真实性能。

嗯...有趣。也许我会试着在同时运行我的笔记本电脑上的每个应用程序时尝试一下... - eric.mitchell

1

你需要在实际设备和模拟器上对你的特定应用程序进行基准测试,因为差异取决于你的应用程序所做的事情。

比如说,模拟器在你的代码上测量速度快了20倍。你可以尝试在应用程序委托中创建一个重复的NSTimer,在计时器回调中每0.05秒nanosleep主线程47.5毫秒(或其他间隔和比例),看看是否能将模拟应用程序的速度降至与设备上的应用程序大致相同。你可能需要通过试错来实验得到正确的“泥浆”量,以便使你的应用程序陷入困境。

在计时器回调中,你还可以监视你的应用程序进程的VM脏页表,并在其扩展一定数量时终止应用程序。


1
在应用程序中使用大量内存空间的几个位置放置这个。这将生成一个内存警告并导致iOS释放视图并尝试释放内存。您可以同时找到所有viewDidUnload错误 ;-)
#if TARGET_IPHONE_SIMULATOR
    SEL memoryWarningSel = @selector(_performMemoryWarning);
    if ([[UIApplication sharedApplication] respondsToSelector:memoryWarningSel]) {
        NSLog(@"simulated memory warning");
        [[UIApplication sharedApplication] performSelector:memoryWarningSel];
    }
#endif

也许可以适当添加一些延迟以达到更好的效果,但是你需要自己决定在哪里以及要延迟多少时间。这里提供一个100毫秒的延迟:
#if TARGET_IPHONE_SIMULATOR
{ 
    const struct timespec delay = { 0, 100000000 }; 
    nanosleep(&delay, NULL);
}
#endif

我不确定我理解这将如何使模拟器像真实设备一样运行。 - eric.mitchell
它仍然不会像真实设备一样运行,但在真实设备上,您的内存有限,并且偶尔会收到内存警告,必须正确处理它们。真实设备也比模拟器慢,可以使用模拟器中的时间延迟来减缓操作速度过快的情况。最好的解决方案是在模拟器和各种设备(3GS、4S、iTouch、iPad等)上进行开发和测试。 - progrmr

0

不,这是苹果销售开发许可证的方式。

您可以使用某种工具来限制CPU和RAM,但这只是猜测。


我想从商业角度来看这是有道理的 - 你知道有这样的工具吗? - eric.mitchell
我想知道是否有可能采取疯狂的方式,创建具有有限处理能力和内存的虚拟机。 - ScarletAmaranth
听起来很合理,也很耗时 :) 不过那可能是我唯一的选择。 - eric.mitchell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接