前段时间遇到这样一个问题,就是从 TestFlight 下载的版本,在 iPhone 6s Plus iOS 11.2.1 上正常,而在 iPhone 5 iOS 10.1 上有个字符串显示不全,直接编译运行到 iPhone 5 时,这个字符串是正常的,改变 Scheme 的 Build Configuration 为 Release,这个字符串就又显示不全了,如果直接编译运行到 iPhone 6s Plus 也是正常的,显然,很容易让人推测是由于编译器针对 32 位优化导致的,同时也说明代码有问题。
经过跟踪调试,锁定了如下代码:
x = (size_t )&option_delta;
do
{
if (x==13)
{
x += current_option[0];
++current_option;
}
else if (x==14)
{
*x += 255;
*x += current_option[0]<<8;
++current_option;
*x += current_option[0];
++current_option;
}
}
while (x!= &option_length && (x= &option_length));
最终,把 unsigned int *x 改为 size_t *x 解决了这个问题。
再早之前也遇到过一个类似的问题,就是在开发时是正常的,而从 App Store 下载的版本就是不正常的。查看代码发现 Byte pBuffer[total1],数组没有初始化,当然,这句代码不是我写的,改为 Byte pBuffer[total1] = {0} 即解决了此问题。
看来,在测试时,一定要拿 TestFlight 中的版本来测啊!
网友评论