问题标签 [nsautoreleasepool]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1000 浏览

xcode4 - 在没有池的情况下自动释放

当我在 Xcode 4 模拟器中运行我的 iPhone 应用程序时,我得到以下输出,我怎么知道是哪个程序导致了这个?

0 投票
2 回答
124 浏览

objective-c - 我们可以使用 NSAutoreleasePool 作为视图吗?

我想知道有什么方法可以NSAutoreleasePool通过视图使用(就像我们在文件中定义一些东西,.hdealloc.m 文件的 dealloc 方法中定义它们一样)。
可能吗?

0 投票
0 回答
358 浏览

objective-c - NSAutoreleasePool 耗尽释放+1 比发送的自动释放消息的数量多

我在调试一个以可重现的方式崩溃的 iPhone 应用程序时遇到了麻烦。

短篇小说: 一个自定义UIViewController被分配并推送到一个UINavigationController's 堆栈上。一段时间后,UIViewController从堆栈中弹出。下一次将 a 压入UIViewController堆栈会使应用程序崩溃。

任何崩溃的标准程序是使用NSZombie启用的仪器。在检查对象的历史后,发现一些我无法理解的内容:

  • 对象接收 2(两)autorelease条消息,并且
  • NSAutoreleasePool's drain 方法发送 3(三)条释放消息

到目前为止,防止崩溃的唯一方法是不向相关对象发送 1(一个)释放消息,从而引发内存泄漏的危险信号,只是它不会泄漏。

还有其他我忽略的解决方案吗?

更新:正如你们中的一个人指出的那样:

你的代码有问题。与自动释放池排水无关。

事实证明,第一个UIViewController是作为委托传递给的,因此当调用来自导航控制器本身UINavigationController时,我感到很困惑。Zombie

下次在问错问题之前我应该​​更加小心。

0 投票
1 回答
369 浏览

iphone - 线程和自动释放池问题

据我了解,有几种方法可以发送要在线程中执行的任务。我最常用的是:

1) performSelector:withObject:afterDelay:

2) performSelectorOnMainThread:withObject:waitUntilDone:

3) performSelectorInBackground:withObject:

4) [NSThread detachNewThreadSelector:toTarget:withObject:]

我的第一个问题是,除了明显的参数差异之外,1) 和 2) 之间有什么区别?它们实际上是否都在主线程中工作(其自动释放池是在 main.m 中自动创建的)?我刚刚从某人在 Stackoverflow 上的帖子中读到方法 1) 实际上是在一个新线程中工作,因此应该为其选择器方法创建一个自动释放池。这个对吗?我一直在使用 1) 很多,主要是为了利用延迟参数,但我从未为它们创建自动释放池。没有发生任何灾难性的事情。

接下来,3) 和 4) 都在单独的线程中执行任务。我听说 UI 的东西不应该在这些线程中完成,但我对什么是严格的 UI 感到困惑。我试图编写代码以在表格视图从导航控制器模态启动时基本上播放重复加载动画。然后动画在 tableview 控制器的 viewDidLoad 方法中停止。最初,我只是将启动动画的代码粘贴在启动模态视图的代码行之上。发生的事情是动画从未播放过。

然后我尝试了以下方法,它奏效了......

动画会一直播放,直到 SettingsViewController 视图完全启动。但是启动像这样的模态视图是否算作“UI”并且应该避免?此外,每次启动模式视图时,我都会在 Instruments 中遇到一些奇怪的内存泄漏错误。但它来自那些“系统库”之一,我被告知很难调试。这里可能出了什么问题?

很抱歉这篇令人尴尬的长帖子。任何帮助将不胜感激!

0 投票
4 回答
2836 浏览

objective-c - 如何判断对象是否在 NSAutoreleasePool 中

我想知道一个对象被自动释放了多少次。我使用objective c 的时间足够长,通常可以直接知道对象是否已自动释放,但是我经常看到处理内存和保留计数的问题。在某些时候,答案总是会结束,“你不能相信一个对象的retainCount”——我同意,但是如果你能确定一个对象被自动释放的次数,那么你实际上可以相信如果你添加了retainCount一个类别,如:

不可变类型仍然会有一个例外,因为它们通常会在复制期间增加保留计数,因此您仍然不能信任这些保留计数。

我不建议什么

我不是在寻找在生产代码中使用 retainCount 的答案。但是,我认为这对于调试内存问题的人很有价值。

我想有些人会讨厌这个问题,因为程序员不应该关心一个对象被自动释放了多少次。编码应该是关于平衡分配、保留、复制、新的发布、故事的结尾。但是,这样做的目的是帮助人们敲打他们的头。 [NSObject retainCount]烧了很多人,这个问题的答案会很酷。

我确信有一种方法可以确定对象被自动释放的次数。我只是不知道它是什么,因此问题。

请参阅类似问题:Objects inside NSAutoreleasePool in objective-c

编辑


谢谢大家的回答。你可能会发现这很有趣 => Ariel 指出 GNUStep 的 Cocoa 实现,特别是 NSAutoReleasePool 有这个方法:+(NSUInteger)autoreleaseCountForObject:(id)anObject。这个方法很慢,并且只返回调用者线程上 NSAutoReleasePools 的自动释放计数。仍然......有趣的是它在那里。文档引用它实际上只对调试有用。这确实是我希望以某种方式在 Cocoa 框架中找到(或找到可能)的东西。

我同意答案,即使有可能获得更好的工具(僵尸,泄漏,静态分析器)存在的自动释放计数。

0 投票
3 回答
453 浏览

objective-c - UIViewController 生命周期中的 NSAutoreleasePool

我正在为 iPad 开发一个应用程序。它提供了几个视图,所以我必须小心内存管理。

我的问题与自动释放对象有关。我想将 NSAutoreleasePool 关联到每个视图控制器。像这样的东西:

MyViewController.h

我的视图控制器.m

NSAutoreleasePool 不能用作属性。我想实现与此类似的行为。任何想法?先感谢您。

编辑

谢谢您的回答。回答您的问题(我还不能回答我的问题):

viewController 会做更多的事情,会响应事件等等。我想要的是,在所有这些操作之后,释放应该自动释放的东西。扩展示例:

MyViewController.h

我的视图控制器.m

在这里,字符串和图像会发生什么?我猜他们被保留在游泳池里,不是吗?我可以在 main 方法中等待释放池,但我想它会在应用程序结束时被耗尽。

0 投票
1 回答
137 浏览

ruby - Ruby 应用程序抛出“试图弹出一个未知的发布池”?(OpenGL,OS X)

在我通过 Gosu 和 Chingu 使用 OpenGL 的小型 Rub​​y 项目中,我现在看到在我的测试过程中出现了许多这样的错误:

2011-09-30 23:31:01.789 ruby​​[832:903] *尝试弹出一个未知的自动释放池 (0x12c55a00)

更新:我现在也看到其中一些表格,肯定表明存在泄漏:

2011-10-01 03:50:00.281 ruby​​ [3212:903] * __NSAutoreleaseNoPool(): NSCFNumber 类的对象 0x461aa0 自动释放,没有适当的池 - 只是泄漏

2011-10-01 03:50:00.282 ruby​​[3212:903] * __NSAutoreleaseNoPool(): NSConcreteValue 类的对象 0x461ae0 自动释放,没有适当的池 - 只是泄漏

2011-10-01 03:50:00.283 ruby​​[3212:903] * __NSAutoreleaseNoPool(): NSCFNumber 类的对象 0x10ce230 自动释放,没有适当的池 - 只是泄漏

2011-10-01 03:50:00.285 ruby​​[3212:903] * __NSAutoreleaseNoPool(): NSConcreteValue 类的对象 0x42abb0 自动释放,没有适当的池 - 只是泄漏

2011-10-01 03:50:00.286 ruby​​ [3212:903] * __NSAutoreleaseNoPool(): NSCFDictionary 类的对象 0xa031570 自动释放,没有适当的池 - 只是泄漏

关于这可能是什么原因的任何想法?这对我来说有点神秘 - 或者至少它没有提供足够的背景让我立即诊断。它似乎不会导致任何测试失败或任何事情,但我确定我正在泄漏内存 - 我猜可能是因为没有正确关闭资源,但我不确定该怎么做关于追踪这个。ruby-debug 可以帮我弄清楚这里发生了什么吗?我在这里调查的下一步应该是什么?

0 投票
1 回答
160 浏览

objective-c - Objective-C :: 如何将 NSAutoreleasePool 用于 NSMutableRequest - 异步请求?

在视图控制器中,我异步执行了很多 NSMutableRequest 调用。在回调方法中,我正在处理响应。这些所有请求都是自动释放的。在这里,我想知道如何使用 NSAutoReleasePool 来释放这些自动释放的对象。你能澄清一下吗?

提前致谢。

0 投票
3 回答
89 浏览

objective-c - How do I find the thread that is leaking because it lacks an NSAutoreleasePool?

I'm getting this message when I run my app:

I understand that I need to create an NSAutoreleasePool at the start of the thread that this is happening on, but I'm not sure where in my code this is happening. Is it possible to set a breakpoint that will be hit when the object in question is autoreleased?

0 投票
2 回答
131 浏览

ios - 我想构建应用程序来培训人们使用内存(iOS)

一般来说,我们有很多对 iOS 编程和内存管理相对较新的员工。我想构建一个应用程序,其中有几个标签显示保留计数和一些按钮来增加和减少这些保留计数。

有没有人知道那里已经有什么可行的方法,或者有任何关于设置它的建议,以便让我的观点得到理解?我有一个工作版本,但它似乎没有按照我认为的方式工作。

当它运行时,它看起来很好,但是每当我尝试按下保留按钮时就会崩溃。如果有人对如何清理它有任何建议,我将不胜感激。理想情况下,我希望他们在保留计数达到零并且应用程序崩溃时按下访问按钮,但只要保留计数为 1 或更好,访问按钮就应该工作。谢谢。