我知道我可以通過從iPhone模擬器的下拉菜單中選擇'Simulate Memory Warning'來模擬模擬器上的內存警告。我甚至可以爲此製作一個熱鍵。模擬代碼中的內存警告,可能嗎?
但這不是我想達到的。我希望通過簡單的代碼來實現這一點,可以說每5秒做一次。那可能嗎?
我知道我可以通過從iPhone模擬器的下拉菜單中選擇'Simulate Memory Warning'來模擬模擬器上的內存警告。我甚至可以爲此製作一個熱鍵。模擬代碼中的內存警告,可能嗎?
但這不是我想達到的。我希望通過簡單的代碼來實現這一點,可以說每5秒做一次。那可能嗎?
這實際上很簡單,但它依賴於未公開的api調用,所以不要將應用程序與它一起發佈(即使它位於不可訪問的代碼路徑中)。所有你需要做的是:[[UIApplication sharedApplication] _performMemoryWarning];
這種方法將有應用程序的UIApplication對象發佈UIApplicationDidReceiveMemoryWarningNotification並調用applicationDidReceiveMEmoryWarning:在App委託方法和所有UIViewController的
-(IBAction) performFakeMemoryWarning {
#ifdef DEBUG_BUILD
SEL memoryWarningSel = @selector(_performMemoryWarning);
if ([[UIApplication sharedApplication] respondsToSelector:memoryWarningSel]) {
[[UIApplication sharedApplication] performSelector:memoryWarningSel];
}else {
NSLog(@"Whoops UIApplication no loger responds to -_performMemoryWarning");
}
#else
NSLog(@"Warning: performFakeMemoryWarning called on a non debug build");
#endif
}
只是alloc-init
循環中的大對象,並且從不釋放它們。這應該會很快觸發記憶警告,我想可以。
發表UIApplicationDidReceiveMemoryWarningNotification
通知默認通知中心:
[[NSNotificationCenter defaultCenter] postNotificationName:UIApplicationDidReceiveMemoryWarningNotification object:nil]
這不會像在硬件 - >模擬內存警告模擬器上觸發的內存警告一樣。有什麼不同?您的代碼只會發佈通知,以便每當您收聽此通知時,您當然都會收到通知,但是在使用您的解決方案時,不會調用viewControllers等所有-didReceiveMemoryWarning方法。 – krasnyk 2011-05-18 09:22:39
將無法正常工作。爲了正確工作,請使用[[NSNotificationCenter defaultCenter] postNotificationName:UIApplicationDidReceiveMemoryWarningNotification object: [UIApplication sharedApplication]]; – 2011-10-05 11:43:59
我寫了一個蘋果腳本,將錘擊模擬器的內存錯誤,它有點極端,但如果你的c Öde倖存下來,那麼你可以更有信心...
on run
repeat 100 times
tell application "System Events"
tell process "iOS Simulator"
tell menu bar 1
tell menu bar item "Hardware"
tell menu "Hardware"
click menu item "Simulate Memory Warning"
end tell
end tell
end tell
end tell
end tell
delay 0.5
end repeat
end run
+1。很好的答案。 – 2010-05-06 23:24:56
可悲的是,這不適用於我4.2,respondsToSelector條件解析爲真,選擇器執行,但沒有任何反應。 – Shizam 2011-03-07 01:59:54
仍然適用於我4.3(雖然我不打擾respondsToSelector)。 – smparkes 2011-06-28 00:29:53