iOS:在分配对象之前检测内存约束

时间:2014-09-25 19:47:53

标签: ios memory memory-management didreceivememorywarning

是否有一种技术可以通过在分配内存之前测试内存的可用性来避免不必要的内存消耗?我知道一般的iOS方法是在必要时优化内存使用并响应didReceiveMemoryWarning,但有时候不会削减它。

在我的用例(图像处理)中,我使用UIGraphicsBeginImageContext()为(可能)大图像分配空间。如果图像太大,我最终会得到一个didReceiveMemoryWarning。但是,在这一点上为时已晚:从用户体验的角度来看,阻止用户开始使用如此大的图像会更好;更有意思的是,“对不起!图像尺寸太大了!做点别的!”在创造它之前,而不是说“哎呀!现在崩溃!”

我在查询可用内存和/或总物理内存时发现了一些SO线程,但使用它们是一个混乱且不可靠的解决方案:没有办法告诉操作系统实际上会让你在给定的内存中使用多少内存时间点,无论多少是免费的。

基本上,我想要这些语义:(在“Swift-Java-ese”中)

try {
   UIGraphicsBeginImageContext(CGRect(x: reallyBig, y: reallyBig))
}
catch NotEnoughMemoryException {
   directUserToPickSmallerImage()
}

// The memory is mine;  it's OK to use it
continueUsingBigImage()

是否有在iOS中执行此操作的方法?

1 个答案:

答案 0 :(得分:0)

您可以尝试使用NSMutableData var length: Int进行预翻,并检查是否为。

let data: NSMutableData? = NSMutableData(length:1000)
if data != nil {
    println("Success")
}
else {
    println("Failure")
}