相关疑难解决方法(0)

Objective-C中的自动引用计数不会阻止或最小化哪种泄漏?

在Mac和iOS平台上,内存泄漏通常是由未发布的指针引起的.传统上,检查您的分配,副本和保留以确保每个都有相应的发布消息始终是至关重要的.

Xcode 4.2附带的工具链引入了最新版本的LLVM编译器的自动引用计数(ARC),通过让编译器为您的内存管理来完全解决这个问题.这非常酷,它确实减少了大量不必要的,平凡的开发时间,并防止了很多粗心的内存泄漏,这些泄漏很容易通过适当的保留/释放平衡来修复.当您为Mac和iOS应用程序启用ARC时,甚至需要以不同方式管理自动释放池(因为您不应再分配自己的NSAutoreleasePools).

但是,其他的内存泄漏它不能阻止我仍然要注意?

作为奖励,Mac OS X和iOS上的ARC与Mac OS X上的垃圾收集有什么区别?

macos memory-leaks objective-c ios automatic-ref-counting

234
推荐指数
3
解决办法
4万
查看次数

新的自动引用计数机制如何工作?

有人可以简单地向我解释ARC是如何工作的吗?我知道它与垃圾收集不同,但我只是想知道它是如何工作的.

此外,如果ARC在没有阻碍性能的情况下完成GC的工作,那么为什么Java使用GC?为什么不使用ARC呢?

cocoa-touch garbage-collection objective-c automatic-ref-counting

206
推荐指数
3
解决办法
6万
查看次数

ARC还是ARC?优缺点都有什么?

我还没有使用ARC,因为我正在研究的项目中的大部分代码都是在iOS 5.0之前编写的.

我只是想知道,手动保留/释放的便利性(以及可能因此产生的更可靠的代码?)是否超过使用ARC的任何"成本"?您对ARC有什么经历,您会推荐它吗?

所以:

  • ARC为项目带来了多少好处?
  • ARC是否像Java中的垃圾收集一样?
  • 您是否一直在使用ARC,如果是这样,到目前为止您是如何找到它的?

iphone objective-c ipad ios5 automatic-ref-counting

112
推荐指数
3
解决办法
2万
查看次数

为什么Java和Python垃圾收集方法不同?

Python使用引用计数方法来处理对象的生命周期.因此,不再使用的对象将立即被销毁.

但是,在Java中,GC(垃圾收集器)会销毁在特定时间不再使用的对象.

为什么Java选择这种策略,这有什么好处?

这比Python方法更好吗?

python java garbage-collection

51
推荐指数
6
解决办法
2万
查看次数

在Mac OS X上,如何在64位进程中中等大小的内存分配失败?

我正在构建照片书布局应用程序.应用程序经常将JPEG图像解压缩到内存位图缓冲区中.图像的大小限制在100万像素(而它们通常不超过1500万像素).

有时这些缓冲区的内存分配失败:[[NSMutableData alloc] initWithLength:]返回nil.这似乎发生在系统的自由物理内存接近零的情况下.

我的理解在Mac OS X中的虚拟内存系统是在64位进程的分配实际上(原文如此),不能失败.有16个exabyte的地址空间,我试图一次分配最多400兆字节.从理论上讲,我可以分配400亿个缓冲区而不会遇到可用地址空间的硬限制.当然,实际限制会阻止这种情况,因为交换空间受启动卷大小的限制.实际上,我只做了很少的这些分配(少于10个).

我不明白的是,无论物理内存有多低,分配都会失败.我认为 - 只要有交换空间,内存分配就不会失败(因为此时页面甚至没有映射).

该应用程序是垃圾收集.

编辑:

我有时间进一步深入研究这个问题,这是我的发现:

  1. 该问题仅发生在垃圾收集过程中.
  2. 当分配NSMutableData失败时,普通malloc仍然可以成功分配相同数量的内存.
  3. 当整体物理内存接近零(交换即将发生)时,总会发生错误.

我假设NSData用于NSAllocateCollectable执行分配而不是malloc在垃圾收集下运行时.

我的结论是,当物理内存很低时,收集器无法分配大块内存.再一次,我不明白.

macos 64-bit memory-management nsdata

12
推荐指数
1
解决办法
2332
查看次数

PDFDocument + Quartz Filter的内存泄漏

我的应用程序使用石英过滤器将PDF文档中的图像转换为黑白图像:

PDF Document *pdfDocument = [[PDFDocument alloc] initWithURL:[NSURL fileURLWithPath:@"/Users/dan/Desktop/test.pdf"]];

QuartzFilter *quartzFilter = [QuartzFilter quartzFilterWithURL:[[NSBundle mainBundle] URLForResource:@"Black & White" withExtension:@"qfilter"]];

NSDictionary *options = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:quartzFilter, nil] forKeys:[NSArray arrayWithObjects:@"QuartzFilter", nil]];

[pdfDocument writeToFile:@"/Users/dan/Desktop/testResault.pdf" withOptions:options];
Run Code Online (Sandbox Code Playgroud)

不幸的是,在应用过滤器的情况下将文件写入磁盘会导致许多内存泄漏,如下所示: 在此输入图像描述

这是Quartz Framework中的一个错误,还是我在上面的代码中做错了什么?

如果你想,你可以在这里下载我的测试项目:http://www.file-upload.net/download-7293644/PDF---Quartz-Memory-Leak.zip.html

我正在使用ARC.

pdf macos cocoa quartz-graphics ios5

5
推荐指数
0
解决办法
474
查看次数

自动引用计数是否可用作垃圾收集器?

在iOS的最新版本中,Apple已经为Objective-C实现了自动引用计数,但我不明白它的作用.

objective-c automatic-ref-counting

-1
推荐指数
1
解决办法
3229
查看次数