메모리 부족 상태에서 앱 기능을 잘 테스트하고 싶지만 테스트하기가 어렵습니다. 앱이 시뮬레이터가 아닌 디바이스에서 실행 중일 때 내 뷰에서 didReceiveMemoryWarning 메서드를 트리거하는 메모리 부족 경고를 유도하려면 어떻게해야합니까? 또는 이러한 가능한 조건에서 앱을 테스트 할 수있는 방법은 무엇입니까?
시뮬레이터를 사용할 수없는 이유는 내 앱이 Game Center를 사용하고 시뮬레이터에서 초대가 작동하지 않기 때문입니다.
답변:
장치에서 테스트하려면 메모리를 해제하지 않고 주기적으로 대량의 메모리를 할당하는 코드를 추가하면됩니다 (예 : 의도적으로 누출). 이 작업은 별도의 스레드에서 수행하거나 타이머에 대한 응답으로 수행하거나 애플리케이션의 동작을 테스트하고 관찰하는 데 가장 적합한 메커니즘을 사용할 수 있습니다.
이 앱을 쉽게 재사용하거나 여러 애플리케이션으로 테스트하려는 경우 유사한 작업을 수행하고 백그라운드에서 실행되도록 설계된 별도의 앱을 만들 수도 있습니다.
private 메서드를 호출 할 수 있습니다 .
[[UIApplication sharedApplication] performSelector:@selector(_performMemoryWarning)];
디버그에서만 사용하는 것을 잊지 마십시오. 그렇지 않으면 앱이 거부됩니다.
po [[UIApplication sharedApplication]performSelector:@selector(_performMemoryWarning)]
expr (void)[[UIApplication sharedApplication] performSelector:@selector(_performMemoryWarning)];
expr (void)[[UIApplication sharedApplication] _performMemoryWarning]
expr UIApplication.sharedApplication().performSelector("_performMemoryWarning")
평소 사용하는 대신 입력#selector
iOS 시뮬레이터의 Simulate Memory Warning
메뉴 항목을 사용하면 메모리 경고를 시뮬레이션 할 수 있습니다.
기기를 사용하여 메뉴 항목을 사용합니다. 기기-> 메모리 경고 시뮬레이션.
Xcode의 앱에서 Instruments를 사용하려면 제품-> 프로필 메뉴 항목을 사용하십시오.
Swift에서 Enzo Tran의 답변 을 다시 작성 했습니다.
UIControl().sendAction(Selector(("_performMemoryWarning")), to: UIApplication.shared, for: nil)
어떤 이유로 든 누군가가 Swift 4에서 이것을 시도한다면 1.2GB의 램을 할당하는 방법이 있습니다.
let d = Data.init(repeating: 100, count: 1200000000)
어떤 이유로 든 누군가가 Swift 3에서 이것을 시도한다면 1.2GB의 램을 할당하는 방법이 있습니다.
for i in 0...1200 {
var p: [UnsafeMutableRawPointer] = []
var allocatedMB = 0
p.append(malloc(1048576))
memset(p[allocatedMB], 0, 1048576);
allocatedMB += 1;
}
스위프트 4 :
UIApplication.shared.perform (Selector (( "_ performMemoryWarning")))
이벤트 / 알림에 대한 응답으로 위를 실행할 수 있습니다.