2015-09-29 73 views
0

我有一個應用程序,其中有很多天文計算。 爲了理智,他們被分成單獨的方法/功能。 單獨運行沒有內存溢出。然而,當我需要計算複雜的東西,比如太陽光的入射角度到地球上的任何地方時,我必須連續調用19個方法,並且內存使用率會通過屋頂。顯然變量仍然存在,因此ARC不能將它們蒸發掉。Swift - 如何正確設置一個弱變量

所以我推測解決方案是創建一個薄弱環節。如果我從

var angleIncidence = Celestial().calculateAngleIncidence(....) 

改變我呼籲

weak var angleIncidence = Celestial().calculateAngleIncidence(....) 

我得到一個「弱不能應用於非類類型雙」。

我顯然是太天真了。

+0

你怎麼知道記憶通過屋頂?你真的在Xcode中使用儀器或儀表嗎?是否存在實際的性能問題? – Abizern

回答

1

雙打不是物體,所以將它們稱爲強和弱是沒有意義的,因爲它們沒有引用計數。

實際上,他們服從可變範圍的典型規則。但是,除非您使用的是非常大的數組,否則它們應該不會成爲大量內存使用的原因。我的感覺是,其他事情可能正在發生 - 可能與其他數據類型存在以及數據如何在函數之間傳遞有關。

+0

好點。我正在處理低數百個雙打而不是單個字符串。在上面的調用中發生的事情是它調用一個函數,然後依次調用另外19個其他方法。這是不好的做法嗎?我每次打電話時都吃了大約4MB的內存,而不是看到的陣列。 –

+0

沒有看到確切的結構,這很難說。但是:1)如果僅僅從代碼可讀性的角度來看,19種方法可能太多了,並且重構代碼可能是一種想法2)4MB沒有那麼多。如果您需要更多幫助,我建議您提供更多關於代碼的更多明確細節的進一步問題。 – michaelrccurtis

+0

將分解代碼並查看罪魁禍首。非常感謝。 –