Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.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
Iphone “是尖尖的记忆”;“健康”;应用程序?_Iphone_Objective C_Cocoa Touch_Memory Management_Iphone Sdk 4.0.1 - Fatal编程技术网

Iphone “是尖尖的记忆”;“健康”;应用程序?

Iphone “是尖尖的记忆”;“健康”;应用程序?,iphone,objective-c,cocoa-touch,memory-management,iphone-sdk-4.0.1,Iphone,Objective C,Cocoa Touch,Memory Management,Iphone Sdk 4.0.1,我最近开发了一个应用程序,它可以非常频繁地(每分钟大约15次)处理大量数据。为此,我分配了一大块内存,然后为每批数据释放它 这是我的仪器内存分配屏幕: 内存使用量从3MB左右快速波动到30MB左右。我只是想知道,iPhone本身是否“健康” 这么快地分配和释放这么多内存有风险吗?这是不可持续的,还是仅仅是坏习惯 谢谢 这要视情况而定,如果用户有iPhone 4或iPhone 3GS,它应该是可以做到的,但在iPhone 3G上,它会很快导致内存警告。 iPhone4的应用程序内存为256mb(

我最近开发了一个应用程序,它可以非常频繁地(每分钟大约15次)处理大量数据。为此,我分配了一大块内存,然后为每批数据释放它

这是我的仪器内存分配屏幕:

内存使用量从3MB左右快速波动到30MB左右。我只是想知道,iPhone本身是否“健康”

这么快地分配和释放这么多内存有风险吗?这是不可持续的,还是仅仅是坏习惯


谢谢

这要视情况而定,如果用户有iPhone 4或iPhone 3GS,它应该是可以做到的,但在iPhone 3G上,它会很快导致内存警告。 iPhone4的应用程序内存为256mb(总共512MB) iPhone3GS的应用程序容量为128mb,总共256个 iphone 3g只有128mb和64mb的应用程序容量。。当没有应用程序运行时,通常有大约40mb的空闲空间

正如苹果公司所说,你应该只分配你真正需要的内存,尽量不要过多地使用autorelease,因为autorelease会在我们工作时给我们一个被分配的对象 我真的不再需要它了


如果性能不太差,我会尝试在您真正需要时使用更少的内存并分配更多的内存。

这既不冒险,也不一定是不好的做法。分配和释放内存需要时间,因此频繁地分配和释放内存与一次分配并重新使用分配的内存是内存使用效率(每时每刻使用最低内存量)和性能之间的折衷

如果你的应用程序的性能目前没有受到影响,那么你可能已经做出了正确的选择


一般来说,对于较旧的设备(iPhone 3G和更旧的设备),使用30 MB的内存是相当大的一笔。你无法确定你的应用程序是否有那么多可用内存,因此请做好接收内存警告的准备。如果您的应用程序在收到内存警告时无法减少内存使用,操作系统可能会将其杀死。

在这些情况下,我最担心的是内存碎片。但是,如果块的大小都相同,你应该会很好(看看你的图表,峰值看起来是完全水平的,所以我认为情况就是这样)


您将支付分配成本,但正如Ole所说,如果您的应用程序已经运行得足够好,那么尝试对其进行优化就没有多大意义。

事实上,您应该将自动释放池与自动释放对象一起使用,并在必要时使用它们。@Adam Ko但您应该使用release,在大多数情况下,您可以自己保留计数,而不需要自己创建池。除非你在一个循环中做osmething,这个循环使用了很多自动释放的对象,否则你会通过一个APIYeah,不知道你的意思。问题中描述的行为不会导致内存警告,除非您正在分配大量内存。此外,你对可用内存的多少做了一些相当大的概括,说“iPhone4有256mb的应用程序(总共512mb)”是不正确的。这不是它在硬件上的工作方式。根据我的经验,任何超过20-25MB的应用程序都会导致iPhone 3G上的应用程序死机。pop850,您应该在旧设备上测试这一点(如果您有兴趣支持它们)。这就是说,如果你的应用程序没有在第一次扣杀中被杀死,那么重复这样做可能也不会杀死它。只要没有泄漏。我想我将不得不分块处理,这样我使用更少的内存,因为我不想把我的观众限制在更新的设备上。然而,这似乎有点微不足道,因为我之前已经分配了超过180MB的内存,而没有在我的iPhone4上崩溃。非常感谢您的回答。出于兴趣,是什么样的处理导致了峰值?是图像处理吗?是的,实际上是图像分析,你怎么知道的?