问题标签 [autorelease]
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.
objective-c - 为什么便利构造函数或对象工厂必须关心释放对象?
实际上,如果您使用名称中带有“new”、“create”、“alloc”或“copy”的方法,那么您有责任释放返回给您的对象。但是:为什么这些方法会调用 -autorelease?这不会导致“过度释放”对象吗?
假设我从这样的方法中获取该对象,然后我调用 -release 。该对象在 Autorelease Pool 中,并且引用计数为 0。当 Autorelease Pool 被释放时,接下来会发生什么?
iphone - 当我执行选择器InBackground: 时,为什么没有自动释放池?
我正在调用一个进入后台线程的方法:
然后,我有这个由选择器调用的方法实现:
尽管我确实为该线程创建了一个自动释放池,但我总是收到此错误:
如果我拿走自动释放池,我会收到一大堆这样的消息。我还尝试围绕 performSelectorInBackground: 的调用创建一个自动释放池,但这无济于事。
我怀疑这个参数,但我不知道为什么编译器会抱怨一个 NSCFNumber。我错过了什么吗?
我的实例变量都是“非原子的”。这会是个问题吗?
更新:我可能还怀疑某些变量已添加到主线程的自动释放池中(可能是 ivar),现在它试图在错误的自动释放池中释放那个变量?如果是这样,我该如何解决?(该死,这个线程的东西很复杂;))
iphone - 如何找到 malloc “双重释放”错误的原因?
我正在用 Objective-C 编写一个应用程序,我收到了这个错误:
MyApp(2121,0xb0185000) malloc: *** 对象 0x1068310 错误: double free
*** 在 malloc_error_break 中设置断点进行调试
当我释放一个 NSAutoreleasePool 并且我无法弄清楚我要释放两次的对象时,就会发生这种情况。
我如何设置他的断点?
有没有办法知道这个“对象0x1068310”是什么?
iphone - NSAutoreleasePool 跨方法携带?
我正在构建一个 iPhone 应用程序,我在其中分离一些线程以在后台执行长时间运行的工作,以免挂起 UI。我知道线程需要 NSAutoreleasePool 实例来进行内存管理。我不确定线程方法是否调用另一个方法 - 该方法是否还需要 NSAutoreleasePool?
示例代码:
我问的原因是我收到的错误是对象正在自动释放而没有适当的池,并且“只是泄漏”。
我已经看到人们根本没有自动释放池的其他问题,我理解为什么需要自动释放池。我特别想知道在(在本例中)创建的自动释放池是否threadedMethod
适用于在anotherMethod
.
objective-c - 在这种情况下如何处理内存管理?
我有两个类,一个处理数据库连接的类和一个实体类。db 类有一个名为 GetEntityByID:(int)entity_id 的实例方法。此方法执行一个简单的选择语句,并使用 init 方法创建一个 Entity 类实例。
这很好用,但是调用 GetEntityByID 的人必须记住释放它。由于 GetEntityByID 不是“init”方法,这似乎不对。在这种情况下,我如何最好地处理内存管理?
iphone - 在将对象添加到集合之前使用自动释放?
我一直在查看 StackOverflow 上提出的问题,但是关于 Objective-C 中的内存管理的问题太多了,我找不到我想要的答案。
问题是在将新创建的对象添加到集合(如 NSMutableArray)之前调用 autorelease 是否可以(并且推荐)?或者我应该在添加后明确释放它。(我知道 NSMutableArray 将保留该对象)
这说明了我的问题:
场景 A(自动释放):
场景 B(显式发布):
我认为两者都是正确的,但我不确定,而且我肯定不知道首选方式是什么。
Objective-C 大师能否对此有所了解?
iphone - 辅助 NSThread 运行循环中需要自动释放池在哪里?
我的应用程序的辅助线程的运行循环如下。它有一个嵌套的控制循环。
- 外循环在应用程序期间运行
- 内部循环在一个视图打开时运行,然后线程在视图未打开时等待。
- 通过内循环的时间很短,只有几分之一秒。
我的代码不会故意将任何自动释放的对象留在未释放的池中,但我不知道操作系统在做什么。
在主线程中,cocoa 在每次通过运行循环时都包装了一个自动释放池。
在这个次要线程中,我相信最接近的等价物是通过内部循环。
内部自动释放池包装每个通过内部循环的通道。
中间池环绕内部循环,因此在此级别创建和自动释放的对象在应用程序终止之前不会保留。
外部池包裹了整个运行循环。
我如何确定所有这些池的创建和发布对我的代码速度有什么影响。
我如何确定所有三个池是必要的还是矫枉过正的?
代码和解释:
组合:
- 一个内部while循环
- NSCondition *processCondition
- 在和
processGo
之间切换YES
NO
允许我在不取消线程的情况下停止并启动内部 while 循环。
执行进入内部while循环。
当主线程设置
执行离开内部while循环并
在外部循环的下一次通过时整理,执行命中
并等待
如果主线程重置
并打电话
执行重新进入内循环
iphone - 多线程 iPhone 应用程序因 [NSAutoreleasePool 版本] 而崩溃
我在多线程 iPhone 应用程序中有一个与内存管理相关的问题。假设我们有这个方法,它在与主 UI 线程不同的线程中调用:
如您所见,我保留NSData
了从网络操作中返回的信息。问题是:为什么我不应该在我的方法结束时释放(或自动释放)它?我让它工作的唯一方法是首先使用retain
,然后什么都不用。如果我使用任何其他组合(什么都没有;retain
然后release
或autorelease
),EXC_BAD_ACCESS
当我释放线程的NSAutoreleasePool
. 我错过了什么?
仅供参考,这是线程的主要代码:
谢谢你的帮助!
iphone - iPhone 开发 - 释放一个自动释放的对象
如果我释放一个自动释放的对象会发生什么?它是我想释放的自动释放 UIButton,创建 UIButton 的唯一方法是使用方便的方法 buttonWithType:。它会像普通对象一样从内存中释放吗?或者我应该让自动释放池来处理它?如果可以的话,我一开始就不会让它自动发布。
谢谢!!
objective-c - 从数组和引用指针中删除后释放
因此,在某些情况下,我有一些与删除对象有关的泄漏。
前提: - 我有一个 NSMutableArray 树对象(树对象知道如何绘制自己)。- 我有一个参考指针(Tree *selected),它基本上指向我最后接触的任何树。- 请注意,*selected 指针是弱引用。
好的,到目前为止一切顺利。
问题:当我删除一棵树时出现泄漏。从列表中,我确保被删除的树在将其从数组中删除之前在内部释放所有内容(从数组中删除它应该自动调用 release )。
我尝试了什么:我注意到我的 Tree *selected 指针通过 self 属性被分配了触摸树:
self.selected = 树;
...通过这样做,我知道它正在被保留。所以我试图做的是调用:
[self.selected release];
从数组中删除树后,我立即调用了它。...但是此时它崩溃了,基本上说明它已经发布了。
问题:为什么我会收到此错误消息?我从数组中删除了它,但是我的 self.selected 指针仍然有一个保留的计数,因此我不应该释放它吗?
也许我应该在删除过程之后将其设置为零?或者,也许我应该在删除过程之前将其设置为自动释放?