Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa Mac上是否有与-ApplicationIDReceiveMemoryWarning:_Cocoa_Macos_Memory Management - Fatal编程技术网

Cocoa Mac上是否有与-ApplicationIDReceiveMemoryWarning:

Cocoa Mac上是否有与-ApplicationIDReceiveMemoryWarning:,cocoa,macos,memory-management,Cocoa,Macos,Memory Management,我正在寻找一个与iPhone上可用的-(void)applicationIDReceiveMemoryWarning:(UIApplication*)应用程序方法等效的方法。到目前为止,我还没有找到任何东西,但我想在开始写我自己的之前检查一下。我想你可以合理地预期,大多数现代Mac电脑将至少有1GB的RAM(可能有2个,甚至4个以上)。如果你的应用程序导致malloc错误和/或内存不足,那么你就做错了,你需要重新考虑你在内存中存储了什么 简言之,没有。Mac的内存限制远不如iPhone,因此不需

我正在寻找一个与iPhone上可用的
-(void)applicationIDReceiveMemoryWarning:(UIApplication*)应用程序
方法等效的方法。到目前为止,我还没有找到任何东西,但我想在开始写我自己的之前检查一下。

我想你可以合理地预期,大多数现代Mac电脑将至少有1GB的RAM(可能有2个,甚至4个以上)。如果你的应用程序导致malloc错误和/或内存不足,那么你就做错了,你需要重新考虑你在内存中存储了什么


简言之,没有。Mac的内存限制远不如iPhone,因此不需要它。

让内核来担心内存管理

iPhone不使用虚拟内存,因此其内存限制非常具体。内核唯一的选择是在它最终终止您之前向您发出警告。这就是为什么iPhone有内存警告


桌面内核有更多的选项可用于处理内存不足的情况,所以最好让它完成它的工作。如果你开始积极地释放已经交换到磁盘上的内存,那对你没有好处。

Mac OS X上的内存与OS X Touch的工作原理不太一样。值得注意的是,台式机有更多的RAM,当应用程序需要更多内存时,它会将内存交换到磁盘。此外,还有许多应用程序在争夺资源

真正的问题是你想要实现什么

如果答案是有效地使用内存,那么您需要专注于最小化分配,确保没有泄漏,并确保数据结构得到优化。在Instruments中使用ObjectAlloc来分析内存使用情况并找出重点

但是,如果答案更符合我的想法,我有一个缓存子系统,可以从大量内存中获益,但我想在其他应用程序增加其需求时将其返还给系统,那么您将需要调查支持情况


值得注意的是,这两个API提供了一种方法,只要它们是系统资源,就可以对数据进行积极缓存,当它们的内存不足时,就可以对系统进行备份或返回。

据我所知,没有直接的等价物。您可能会检查对象分配是否失败,然后发送通知以允许应用程序的其他部分可以侦听


实际上,大多数应用程序并不麻烦。在您实际开始无法分配对象的情况下(虚拟内存耗尽、启动磁盘完全满等),您很可能会出现崩溃。

并非完全相同,但您可以使用GCD查看一种内存警告

let a = DispatchSource.makeMemoryPressureSource(
    eventMask: [.warning], queue: .main)
a.setEventHandler(handler: {
    print("memory warning!")
})
a.resume()

尽管我还没有测试这段代码是否能正常工作。

您假设Mac的1GB内存可以使用。如果其他应用程序使用99%的RAM,那么您的应用程序只有1%的RAM可供自己使用。你可以说Mac电脑上对该功能的需求减少了,但这与“不需要”不同。@jeremy桌面系统上的内存不是这样工作的@Dave事实上,有相当大的需要高效地管理内存,而且应用程序根据系统的功能调整内存使用以实现最大性能的情况并不少见。幸运的是,有一个API(在雪豹中)。谢谢比尔。我确实在尝试创建数据缓存。。在这种情况下,如果需要,系统可以回收这些图像。NSDiscardableContent协议听起来正是我想要的。很高兴看到系统中内置了。是雪豹!