[問題] 如何清除NSString 記憶體

看板MacDev作者 (neo)時間9年前 (2015/06/20 04:00), 編輯推噓3(3011)
留言14則, 6人參與, 最新討論串1/2 (看更多)
不好意思 又要麻煩各位了.. 想請問大家 for(int i=0;i<2000000;i++) { NSString *KeyR; NSString *KeyG; NSString *KeyB; KeyR = [NSString stringWithFormat:@"%d", 1]; KeyG = [NSString stringWithFormat:@"%d", 2]; KeyB = [NSString stringWithFormat:@"%d", 3]; } 我跑這段的時候 記憶體大大增加 請問要怎麼在每一個loop的時候 清除NSString記憶體呢? 謝謝大家!~ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.207.126 ※ 文章網址: https://www.ptt.cc/bbs/MacDev/M.1434744034.A.B64.html

06/20 06:30, , 1F
nsstring 放外面試試看吧,感覺每次都重新建立變數,
06/20 06:30, 1F

06/20 06:30, , 2F
就一直耗記憶體,兩百萬次跑起來很恐怖吧
06/20 06:30, 2F

06/20 07:55, , 3F
傳統上local是放stack,即使在block內宣告應該也不會多
06/20 07:55, 3F

06/20 07:55, , 4F
allocate記憶體空間
06/20 07:55, 4F

06/20 07:56, , 5F
可能是stringWithFormat其實就是new一個heap的object
06/20 07:56, 5F

06/20 07:57, , 6F
所以要不要試試NSMutableString
06/20 07:57, 6F

06/20 10:10, , 7F
非常需要效率和記憶體的地方, 建議還是用C比較好
06/20 10:10, 7F

06/20 12:53, , 8F
你用 [[NSString] alloc] initWithFormat] 看看
06/20 12:53, 8F

06/20 12:54, , 9F
我用這他記憶體就不會飆上去了 但是thread會卡就是了
06/20 12:54, 9F

06/20 12:54, , 10F
這在ARC應該會自動幫你插入release
06/20 12:54, 10F

06/20 13:54, , 11F
for(int i=0;i<2000000;i++) @autoreleasepool {
06/20 13:54, 11F

06/20 13:54, , 12F
// Your code...
06/20 13:54, 12F

06/20 13:55, , 13F
}
06/20 13:55, 13F

06/26 13:01, , 14F
Autorease pool
06/26 13:01, 14F
文章代碼(AID): #1LX7JYja (MacDev)
文章代碼(AID): #1LX7JYja (MacDev)