前段時(shí)間遇到這樣一個(gè)問題,就是從 TestFlight 下載的版本,在 iPhone 6s Plus iOS 11.2.1 上正常,而在 iPhone 5 iOS 10.1 上有個(gè)字符串顯示不全,直接編譯運(yùn)行到 iPhone 5 時(shí),這個(gè)字符串是正常的,改變 Scheme 的 Build Configuration 為 Release,這個(gè)字符串就又顯示不全了,如果直接編譯運(yùn)行到 iPhone 6s Plus 也是正常的,顯然,很容易讓人推測(cè)是由于編譯器針對(duì) 32 位優(yōu)化導(dǎo)致的,同時(shí)也說明代碼有問題。
經(jīng)過跟蹤調(diào)試,鎖定了如下代碼:
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 解決了這個(gè)問題。
再早之前也遇到過一個(gè)類似的問題,就是在開發(fā)時(shí)是正常的,而從 App Store 下載的版本就是不正常的。查看代碼發(fā)現(xiàn) Byte pBuffer[total1],數(shù)組沒有初始化,當(dāng)然,這句代碼不是我寫的,改為 Byte pBuffer[total1] = {0} 即解決了此問題。
看來,在測(cè)試時(shí),一定要拿 TestFlight 中的版本來測(cè)啊!