问题标签 [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.

0 投票
1 回答
813 浏览

iphone - copyWithZone 返回值所有权和保留计数

我在苹果文档中读到了 copyWithZone :

“返回的对象由负责释放它的发送者隐式保留”。

所以如果我写这个:

我打电话给:

obj保留吗?如果我不设置自动释放,保留计数怎么办?

0 投票
3 回答
801 浏览

iphone - iPhone - 如果在自动释放后保留会发生什么?

你知道如果我保留一个自动释放的对象会发生什么吗?它会被释放还是保留获胜?

0 投票
2 回答
551 浏览

objective-c - iOS / ManagedObjectContext 中的内存管理

看起来我不了解Objective C中的内存管理......叹息。

我有以下代码(请注意,在我的情况下,placemark.thoroughfare并且placemark.subThoroughfare都填充了有效数据,因此两个 -if条件都是TRUE

item绑定到一个ManagedObjectContext. item诸如此类的托管变量place具有使用@dynamic. 因此,声明是

稍后在代码中,在 ReverseGeocoderDelegate 中,我访问它:

如果我没有item.place在代码中的标记位置释放,Instruments 会在那里发现内存泄漏。如果我这样做了,一旦我尝试item.place在违规方法之外访问,程序就会崩溃。

有任何想法吗?

0 投票
2 回答
3550 浏览

iphone - 自动释放池崩溃应用

我的自动释放池随机使我的应用程序崩溃,这个问题的常见原因是什么?

我知道这是因为一个对象被过度释放,我认为一个对象在自动释放池试图释放它之前被释放是正确的。因此自动释放池试图过度释放一个对象?

0 投票
1 回答
1495 浏览

cocoa - 在 NSOperation 中自动释放对象是否安全?

我在 NSOperationQueue 中运行 NSInvocationOperation 类型的操作,并且想知道自动释放对象是否安全 - 也就是说,是否保证为每个操作启动的线程都有自己的自动释放池。

我没有找到任何用于操作的文档自动释放池 - 阅读 Apple 的文档实际上表明我确实需要定义自己的自动释放池。

但是:1)我看不到仪器中的任何泄漏,至少不会超过我在操作中分配自己的自动释放池时。

2)查看调试器我可以看到这个堆栈跟踪:

所以看起来好像有一个 CFAutoreleasePool - 假设这个对象会在操作完成时对我所有的自动释放对象调用释放是否安全?

0 投票
0 回答
383 浏览

iphone - NSFetchRequest 自动释放,没有适当的池 - 只是泄漏

首先,我不得不说这个网站及其成员的反应令人惊叹。最有帮助。谢谢你。

其次,在对我正在开发的 iPhone/iPad 应用程序进行故障排除时,我正在排除以下错误:

NSFetchRequest 自动释放,没有适当的池 - 只是泄漏。

罪魁祸首似乎是

在这个方法中找到

我不确定发布声明是否设置正确,但即使首先出现错误,我仍然不确定。我对目标 c 有点陌生,在编译时应用程序没有指示任何错误(消息在运行时显示)。

如果有人可以帮助我解决这个问题,将不胜感激。

谢谢

爱德华

0 投票
5 回答
1350 浏览

objective-c - 为什么这不会崩溃?

我试图将错误缩小到最小的可重现情况,并发现了一些奇怪的东西。

考虑这段代码:

期待这段代码崩溃。相反,它记录:

但是,如果我将其更改NSLog()为:

然后它确实崩溃了。

编辑更多信息:

排干游泳池后:

所以显然在字符串上调用一个方法足以让它崩溃。在那种情况下,为什么不直接记录字符串会导致它崩溃?不NSLog()应该调用该-description方法吗?

第二个“静态:”来自哪里?为什么这不崩溃?


结果:

凯文巴拉德和格雷厄姆李都是正确的。格雷厄姆正确地意识到这NSLog()不是调用(正如我错误地假设的那样-description),而凯文几乎肯定是正确的,这是复制格式字符串和va_list周围的一个奇怪的堆栈相关问题。

  1. NSLogging并且NSString不调用-description. Graham 优雅地展示了这一点,如果您跟踪进行日志记录的 Core Foundation 资源,您会发现情况确实如此。任何源自内部的回溯NSLog都表明它调用了NSLogv=> _CFLogvEx=> _CFStringCreateWithFormatAndArgumentsAux=> _CFStringAppendFormatAndArgumentsAux_CFStringAppendFormatAndArgumentsAux()(第 5365 行)是所有魔法发生的地方。您可以看到它正在手动查找所有%替换。CFFormatObjectType如果替换的类型是 a ,描述函数是非 nil 并且替换还没有被其他类型处理,它只会调用描述复制函数。由于我们已经证明描述没有被复制,因此可以合理地假设NSString得到更早的处理(在这种情况下,它可能会进行原始字节复制),这让我们相信......
  2. 正如凯文推测的那样,这里发生了堆栈错误。不知何故,指向自动释放字符串的指针替换为另一个对象,而该对象恰好是一个NSString. 所以,它不会崩溃。奇怪的。但是,如果我们将静态变量的类型更改为其他类型,例如 an NSArray,则该-description方法确实会被调用,并且程序确实会按预期崩溃。

多么真实和完全奇怪。凯文对行为根本原因的看法最正确,而格雷厄姆纠正了我的错误想法,我对此表示赞赏。我希望我能接受两个答案...

0 投票
0 回答
266 浏览

iphone - 即使已将自动释放对象添加到 NSMutableArray,它也会被释放

我使用以下方法创建我的对象:

然后我将它添加到 NSMutableArray:

我初始化的地方:

过了一会儿,这个对象被自动释放——即使它已经被添加到我的 NSMutableArray 中,它肯定还没有被释放。

我不理解这种行为 - 只要它是任何 NSMutableArray 的成员,它不应该归 NSMutableArray 所有吗?

附言。实际上,这是我喜欢使用 NSMutableArrays 而不是简单数组的主要原因之一——它们通过自动释放对象来处理所有权。

我哪里错了???非常感谢!

0 投票
4 回答
837 浏览

iphone - 基本保留,自动释放问题

保留和自动释放问题。

这两个代码没有区别吗?

还有这两个?我还不确定保留计数。谢谢你。

0 投票
1 回答
516 浏览

objective-c - 自动释放然后为设置器保留

根据Google Objective-C Style Guide,我们应该这样自动释放然后保留:

在这种情况下,如果将 foo_ 设置为同一个实例,则不会释放它,从而形成更具防御性的 setter。

我的问题是,@property 和 @synthesize 是这样工作的吗?