使用imageNamed這個方法生成的UIImage對象,會在應用的bundle中尋找圖片,如果找到則Cache到系統緩存中,作為內存的cache,而程序員是無法操作cache的,只能由系統自動處理,如果我們需要重復加載一張圖片,那這無疑是一種很好的方式,因為系統能很快的從內存的cache找到這張圖片,但是試想,如果加載很多很大的圖片的時候,內存消耗過大的時候,就會會強制釋放內存,即會遇到內存警告(memory warnings).
由于在iOS系統中釋放圖片的內存比較麻煩,所以沖易產生內存泄露。
像[[UIImageView alloc] init]還有一些其他的 init 方法,返回的都是 autorelease 對象。而 autorelease 不能保證什么時候釋放,所以不一定在引用計數為 0 就立即釋放,只能保證在 autoreleasepool 結尾的時候釋放。
像 UIImage 還有 NSData 這種,大部分情況應該是延遲釋放的,可以理解為到 autoreleasepool 結束的時候才釋放。
更多:iOS面試題合集