現象
一個簡單的App,在測試機iPhone6S上正常運行,準備打包了。臨時發現需要iPhone5尺寸的應用截圖,就開了iPhone5的模擬器,準備運行應用來截圖。
結果發生了崩潰,一看崩潰堆棧,是訪問Model的某個屬性的時候崩潰了,報了訪問錯誤地址的異常。當時覺得很奇怪,以為是獲取回來的網絡數據出錯了,核對了一下,發現沒問題。
再仔細看了下崩潰時的Model,除了有兩個屬性不正常之外,其他的屬性值和類型都是正確的。下意識以為是那里內存寫溢出了,把這個Model給破壞了,就review了下代碼,發現沒啥問題。
再回過頭來細思一下,如果內存被覆寫了,那Model不應該就那兩個屬性有問題,而其他正常。翻看了下Model的定義,結果就發現問題所在了。
出問題的那兩個屬性是NSString *類型的,但是錯誤地使用了assign修飾,導致問題的產生,修改成正確的copy修飾之后,一切正常了。
總結
這個問題的產生是因為最初先根據網絡接口文檔定義好了Model,出問題的兩個屬性在文檔里說明是int類型的,只是調試的時候才發現文檔不正確,實際傳過來的是字符串。所以就把兩個屬性的類型改成了NSString *,但是忘記把修飾的assign改成copy了。一個粗心大意導致了這么個問題的出現。