问题标签 [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 投票
4 回答
981 浏览

cocoa - 处理从可可便捷方法返回的对象

我有很多关于 NSDate 对象被过早释放的问题。我怀疑这些问题可能与我处理从 NSDate 便捷方法返回的对象的方式有关。我认为我在 JKShow 类中的 showDate 属性声明应该是“保留”,但是将其更改为分配或复制似乎对问题没有影响。

更新

问题不在此处复制的代码中。在我的JKShow init方法中,我没有保留从NSDate便捷方法返回的日期。谢谢大家的帮助。

0 投票
6 回答
9896 浏览

iphone - 自动释放 iPhone

在开发 iPhone 应用程序即将结束时,我想知道在为 iphone 开发时使用 autorelease 有多糟糕。我面临着一些相当随机的崩溃,到目前为止,除了马虎的内存使用之外,我无法确定它是什么。

作为一个 Cocoa 新手,我记得最初阅读了一份指南文档,该文档强烈建议避免自动释放以支持 iPhone 的手动保留/释放。然而,一个更“高级”的 Cocoa 开发人员很早就加入了(具有讽刺意味的是,自那以后他就被解雇了),他在所有地方都使用了 autorelease。诚然,我进入了“猴子看猴子做”模式,它似乎又回来困扰着我(我现在是该项目的唯一开发人员)。

那么接下来该怎么做呢?在我看来,我必须对代码进行分支并尝试在可能的情况下通过并替换自动释放代码,让我的手指交叉,以免我无意中破坏了应用程序。似乎很多库调用会导致自动释放对象,如 stringWithFormat 以及我自己不使用 alloc 的几乎任何东西。我应该注意的任何其他问题和/或建议?感谢可可大师。

0 投票
5 回答
11498 浏览

iphone - 为什么自动释放对 iPhone 应用程序特别危险/昂贵?

我正在寻找一个主要来源(或一个非常好的解释)来支持在autorelease为 iPhone 编写软件时使用是危险的或过于昂贵的说法。

有几位开发人员提出了这种说法,我什至听说苹果不推荐它,但我无法找到任何具体的来源来支持它。

SO 参考:
autorelease-iphone
为什么这会造成内存泄漏(iPhone)?

注意:我可以看到,从概念的角度来看,这autorelease比简单地调用 稍微贵一些release,但我认为小惩罚不足以让 Apple 推荐反对它。

真实的故事是什么?

0 投票
5 回答
4510 浏览

cocoa-touch - autorelease 什么时候真正导致 Cocoa Touch 中的释放?

autorelease我知道您在 iOS 上需要小心。我有一个方法返回alloc调用者需要的对象,所以在这种情况下——据我所知——我需要autorelease在它返回之前发送给被调用者中的对象。

这很好,但是一旦控制权返回到手机(即在我的按钮点击被处理之后),似乎自动释放池被释放了。我怀疑这是应该的,但我想知道这种情况下的最佳做法是什么。

我已经求助于从调用者发送一条retain消息,以便该对象不被释放,然后在dealloc.

这是最好的方法吗?

0 投票
3 回答
2456 浏览

iphone - Objective-C 中的自动释放和“分配”属性?(在 iPhone 上)

我有一个 UITableView 的实例,以及一个遵循委托和数据源协议的单独类。我这样做是这样的:

我不想将处理程序维护为 ivar,如果我retain在最后取消调用,当autorelease发生这种情况时,它会被发送release,然后添加到池中,这会导致 EXC_BAD_ACCESS。所以目前,保留计数是:

但是由于属性是“分配”的,它们永远不会被释放,保留计数永远不会达到 0,处理程序也永远不会被释放。有没有比将处理程序维护为 ivar 并在方法中释放它更有效的方法来实现这一点dealloc

0 投票
4 回答
955 浏览

iphone - 如何引用自动释放池中的对象?

我想知道自动释放池是否持有对其持有的对象的强引用或弱引用。我猜他们很弱。当我将对象添加到自动释放池时,它不会立即释放,而是会在池耗尽时释放,对吗?所以引用应该是弱的,即当我将对象添加到自动释放池时引用计数(或保留计数)保持不变?

0 投票
3 回答
11296 浏览

iphone - 将 -release 或 -drain 发送到自动释放池有什么区别?

在许多书籍和许多网站上,我看到 -drain。好吧,对于一个听起来很酷的自动释放池。但它除了发布之外还有其他作用吗?我猜 -drain 只是让 Pool 释放它的所有对象,而不释放 Pool 本身。只是一个猜测。

0 投票
2 回答
1773 浏览

iphone - main.m 真的是每个事件创建主运行循环的自动释放池的地方吗?

如果是这种情况,那么 main() 函数必须在每个事件上调用,对吗?但我试过了,“新事件......”日志消息只是在应用程序启动时出现。所以我猜主线程中肯定还有另一个自动释放池。

0 投票
3 回答
2845 浏览

iphone - 我应该 -drain 还是 -release iPhone OS 中的自动释放池?

医生说:

在垃圾收集环境中,如有必要,向池发送一条耗尽消息会触发垃圾收集;但是,发布是无操作的。在引用计数环境中,drain 与 release 具有相同的效果。因此,通常应该使用排水而不是释放。

如果我做对了,他们说我应该总是使用-drain,不管周围有垃圾收集还是引用计数。在 iPhone 上没有 GC,所以无论如何我发送 -drain?

不幸的是,该文档只谈到了 Cocoa,而不是 Cocoa Touch 或 iPhone。所以我不确定这是否同样适用。

0 投票
3 回答
417 浏览

iphone - 是否可以将对象添加到特定的自动释放池?

在文档中有一个 addObject: NSAutoreleasePool 方法。

我想过这个:

NSString *myString = [[NSString alloc] initWithCString:"这行得通吗?"]; [thePool addObject:myString]; [另一个池 addObject:myString];

那可能吗?我总是读到我只能将对象添加到自动释放池堆栈的最顶层。