MacDev 板


LINE

連續天天加班到凌晨,總算專案快出一版了 是中點,不是終點 最近試著用 instrument 去抓 memory leak,卻發現記憶體吃得離譜 不得已又寫了個小程式,離開公司架構,小小的測試一下 寫得很簡單,就兩個畫面切來切去 1.開一個新程式 2.在 storyboard 上,擺一個 button 3.開一個新的 xib & UIViewController 4.新 xib 上也擺一個 button 5.coding 第一個 button,很簡單的載入 xib 檔,開始 MyViewController 而已 MyViewController* controller = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil]; [self presentViewController:controller animated:true completion:nil]; 第二個 button,很簡單的關閉 MyViewController, 回到原來的 controller [self dismissViewControllerAnimated:true completion:nil]; 程式夠簡單了,抄書的 然後在兩個檔 ( storyboard & xib ) 上,擺一大堆 button 這麼做只是為了增加記憶體消耗,使結果明顯 執行,快速的按 button1 , button2, 讓畫面切來切去 就這樣竟然也有 memory leak (不要只用 Xcode 的環境看,要打開 instrument 看,才明顯) 程式顯示, [self presentViewController:controller animated:true completion:nil]; 光這行都會吃記憶體 我可以理解的是,當我把 controller 傳入 present view 函式,它就被保留了 難道我必需自己把它移出刪除嗎? 這樣太不合理了!! 寫一個 -(void)delloc 來驗證,也會發覺在按下 close button 時有 delloc 啊 那記憶體佔用又是為什麼呢? -- 活動/美食計劃 蘭嶼 魚白 勝興車站 星月天空 武陵 草嶺古道 嘉義阿里山小火車 保齡球  司馬庫斯 手包水餃 日月潭纜車 合歡攻頂 馬祖 鹽山 南庄 澎湖 溪頭/松林町 南投天梯 --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.251.197.63
※ 文章網址: http://webptt.com/m.aspx?n=bbs/MacDev/M.1397253951.A.737.html
1F:→ HuangJC:又天亮了,唉 04/12 06:06
2F:→ darktt:有dealloc不代表物件有正確的Release 04/12 07:31
這個知道 但這麼簡單的 sample,又是抄書的 這樣也不行 總不能叫我把 storyboard & xib 中, 所有的物件用 for loop 一個個 remove from super view 吧! ;; 聽主管在'猜'(沒經驗,也只能大猜特猜了) 那些記憶體是暫時沒釋放,等空間不足時就會被整理釋出 這是什麼思維?這不就是 GC 嗎? 所謂用一個 thread 去繞行所有物件,找到沒被 reference 的就自動刪除 thread 不一定何時做這件事;ARC 不是這樣吧!! 以 ARC 是 compiler 自動插入 retain & release 來說 我以為記憶體的釋放會是即時的 ※ 編輯: HuangJC (60.251.197.63), 04/12/2014 08:40:34
3F:→ uranusjr:要嘛去聘一個會的人不然就用別的吧, 都給你們猜就飽了啊 04/12 09:34
這... 我是兵,我不用扛這責任 主管可要挨罵了:養你做什麼吃的 不過事實上是那人請來,我就可以走路了 XDDDD 我們還是有些鬼才啦,從不懂到懂,到弄出東西...
4F:→ yuanruo:我在上面各擺了兩百多個button 怎沒leak ? 04/12 11:36
我下週上班時把自己程式壓縮一下,可以給大家下載;這樣最沒爭議 然後測試步驟... 這很難表達,但那麼簡單應該沒問題 再來就是抓幾個畫面吧.. 有畫面才有真相啊.. ※ 編輯: HuangJC (175.180.126.61), 04/12/2014 14:35:02
5F:推 abcdefghi:在dealloc裡用 CFGetRetainCount() 抓一下每個object的 04/12 23:34
6F:→ abcdefghi:reference count, ARC也不是萬能,有些情況要人腦分析. 04/12 23:35
7F:推 chchwy:ARC是即時釋放沒錯 沒釋放就是有地方沒寫好 04/13 20:10
8F:→ HuangJC:真的很感謝你們;雖然不知多久後又要害你們失望 04/14 02:23
9F:→ HuangJC:可是陌生人能如此給機會諒解對方,你們都很了不起.. 04/14 02:24
10F:→ Teferi:印象中上課的老師有提過,iOS就是記憶體滿了才清除,機制也很 04/15 12:35
11F:→ Teferi:像你所描述的方式 04/15 12:36
12F:→ Teferi:原本的記憶體管理 release本來也是操作retain而已呀 04/15 12:37
13F:→ HuangJC:http://tinyurl.com/monh5na 程式來了 04/15 16:26
14F:→ HuangJC:http://tinyurl.com/la87dej 執行結果,可以看到記憶體 04/15 17:09
15F:→ HuangJC:愈吃愈多 04/15 17:09
16F:→ darktt:你需要開放權限出來,我用我的mail請求權限了, 04/15 20:51
17F:→ darktt:開頭是pippi的就是我的mail 04/15 20:51
18F:→ HuangJC:有看到;不懂的是我以為我給的網址就是公開權限了 04/15 21:40
19F:→ HuangJC:那程式不就也無法下載? 04/15 21:40
20F:→ atst2:1. 根本沒有leak 04/15 23:09
21F:→ atst2:2. allocation表示的是現在在用的Memory,只要程式在跑 04/15 23:10
22F:→ atst2:就會有記憶體使用. 04/15 23:10
23F:→ atst2:3. Leak是看下面的leak欄位有沒有出現紅線. 04/15 23:10
謝謝,拖了一天;週一忙,週二想吐 Orz 1. 說沒有 leak 我懂;這是我長期以來的筆誤 試考量這樣的狀況 @interface MyController @property id View; @end @interface MyView @property id Controller; @end 也就是說, 元件 A 內部有指標指向元件 B 然後元件 B 內部又有指標指回元件 A 因為元件 B 的緣故,所以元件 A 的 ref count 不會歸 0 造成無法自動釋放; 這問題可用 weak 指標解決 而沒解決之前,記憶體佔用不會解決;這不叫 leak, 不過我不知這該叫什麼 我擔心的是這種 2. 以 C/C++ 來說,因為沒有 arc, 我自己控制 我還算可以理解 leak 是怎麼產生的 BYTE* p = new BYTE[10]; // delete[] p; p = null; 這樣就好,因為我沒先釋放 p 就把指標歸0了, 這樣誰還能存取那塊空間? 沒有.. 沒有就是 leak 了 但在 ARC 控制之下, 在這裏, p = nil 就足以指示一個釋放指令 所以我反而想請教: 怎麼寫一個最短的 leak demo 因為我以為, 如果我可以把 ref count 歸 0,那 arc 都會幫我釋放 3. "只要程式在跑,就會有記憶體使用" 可是我的狀況是不斷的按按鍵,讓畫面在兩個畫面間跳 (雖然這裏不是用 push/pop 來寫, 而是用 present/dismiss) 所以當我跳回原畫面時, 記憶體佔用不該恢復原貌嗎? 這樣愈吃愈多是正常的? (我的畫面就是一直按而產生的,按愈多下記憶體佔用愈多) 謝謝 ※ 編輯: HuangJC (175.180.126.61), 04/16/2014 03:38:11
24F:推 leslielion:Please implement unwinding storyboard segue 04/22 23:31







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BuyTogether站內搜尋

TOP