作者:臭小子 | 2023-09-01 18:13
我听说过应用程序在模拟器上无法正常工作,但在实际的iPhone设备上正常工作.有没有人经历过在模拟器中完美运行但在实际iPhone设备上没有运行的应用程序?
1> Kristopher J..:
文件名在iPhone上区分大小写,但在模拟器中不区分大小写.
因此,例如,如果您尝试使用加载图像UIImage *iconImage = [UIImage imageNamed:"MyIcon.png"]
,但您的资源实际上名为"myicon.png",那么它将在模拟器上运行,但不在设备上运行.
毫无疑问,这是模拟器中的一个错误.模拟器应该模拟设备上会发生什么."哦,Mac文件系统不区分大小写"的借口就是:借口.Apple可以轻松解决这个问题.
我不认为他们会认为这是一个错误.iPhone的文件系统并不打算与Mac相同,而Mac的文件系统由于历史原因不区分大小写.
大多数基于UNIX的系统都有区分大小写的文件系统.Mac OS X在这方面"很奇怪",并且这样做是为了保持与OSX前Mac系统的兼容性.iOS没有理由匹配它.
2> Robert Gould..:
如果您的应用程序是图形密集型的,比如说游戏,那么模拟器的性能并不像硬件那样.您的应用程序可能会很平滑并且在模拟器上运行良好,但在硬件上它可能会爬行,除非您知道自己在做什么.您可以轻松地在模拟器和硬件之间从60fps到3fps.
我已经看到很多情况下,iPad模拟器中的动画不会100%平滑,但在设备上绝对没问题.在Simulator中,Core Animation的性能总是更好,您应该始终在实际设备上进行测试.
我看到相反的情况:我的应用程序会在模拟器上爬行,但在设备上运行正常.我认为这是由于MacBook的图形功能不佳; 使用更好的Mac可能会更好.
克里斯托弗,听起来不对.根据我的基准测试,我的第一代(白色)Core 2 Duo MacBook可以在iPhone中以每秒9X的速度推动OpenGL.也许你有一个线程锁定问题,干扰你的渲染.
使用Cocos2d我在模拟器上平均30 fps.当我在真正的iPad上运行相同的应用程序时,我的平均速度为60 fps.
3> iforce2d..:
评估函数/构造函数参数的顺序是不同的:
int i = 0;
int f() { return ++i; }
int a, b;
int test(int p1, int p2) {
a = p1;
b = p2;
}
test( f(), f() );
//simulator: a = 2, b = 1
//device: a = 1, b = 2
订单实际上是未定义/依赖于实现的.因此,如果使用两个不同版本的编译器,则可以在同一平台上看到不同的行为.
4> iforce2d..:
三角函数可能会返回不同的结果:
float a = cosf( 0.108271248639 );
printf("%.12f", a);
//simulator: 0.994144439697
//device: 0.994144380093