最近做開屏廣告的一個(gè)功能,就是倒計(jì)時(shí)結(jié)束進(jìn)入主頁(yè)面,程序在模擬器和真機(jī)的時(shí)候都能正常進(jìn)入。但是打包出來,測(cè)試,倒計(jì)時(shí)后無法進(jìn)入主頁(yè)面,就卡在最后一秒了?。?!
后面查問題,原來打包出來的BOOL值變成隨機(jī)值了?。?!


因?yàn)楫?dāng)時(shí)沒給BOOL沒有初始化賦值,雖然程序在模擬器和真機(jī)運(yùn)行,isComplete = 0,但是打包出來,isComplete的值變成隨機(jī)值,原來在debug和release環(huán)境也是有區(qū)別的!

這是為什么呢?
如果你聲明了一個(gè)變量但是沒有為它提供一個(gè)值,它就被認(rèn)為是“未初始化的”。C中一個(gè)未初始化的變量具有“未定義”值,通常是垃圾,包含最后一次寫入該地址時(shí)發(fā)生的任何事情。嚴(yán)格來說,“未定義”意味著你不應(yīng)該使用該值。
這個(gè)變量是本地的,每次運(yùn)行該方法時(shí)都會(huì)被重新創(chuàng)建,因此會(huì)得到一個(gè)新的實(shí)際值,但每次都是未定義值。
在ARC下,本地對(duì)象指針總是有一個(gè)默認(rèn)值nil,但是類似BOOL的非對(duì)象類型的局部變量仍然被初始化為垃圾,垃圾值就是未確定的值,即出現(xiàn)隨機(jī)值。
同理比如:int a。
總結(jié):養(yǎng)成好習(xí)慣給變量默認(rèn)值?。?!
BOOL isComplete = NO;
參考:
https://stackoverflow.com/questions/10022025/local-variables-set-to-nil-objective-c
https://stackoverflow.com/questions/9726817/can-variables-be-set-randomly-when-declaring-them-again/9726948#9726948
https://stackoverflow.com/questions/1597405/what-happens-to-a-declared-uninitialized-variable-in-c-does-it-have-a-value