0

我正在使用以非弧(SMTP 库 - 通过使用编译器标志使其保持非弧)编写的库。现在,我的一个类被注册为该库的委托,并且库正在向我传递保留计数为 1 的对象。弧前我应该释放这样的对象,但现在在弧中我不知道该怎么办?

4

1 回答 1

0

请记住,如果类本身被释放,则在 ARC 之前,您必须在对象之前释放每个类的每个实例变量。ARC之前的规则说,

  • 当您使用 new、alloc 或 copy 创建对象时,该对象的保留计数为 1。您有责任在完成后向该对象发送释放或自动释放消息。这样,当它的使用寿命结束时,它就会被清理干净。

  • 当您通过任何其他机制获取一个对象时,假设它的保留计数为 1 并且它已经被自动释放。你不需要做任何进一步的工作来确保它被清理干净。如果您要在任何时间段内抓住该对象,请保留它并确保在完成后释放它。

  • 如果您保留一个对象,您需要(最终)释放或自动释放它。平衡这些保留和释放。

因此,如果您要临时使用该对象(例如在单个函数的范围内),您什么也不做,但为了更长时间的使用,您可以保留它(将保留计数增加到 2)并在完成后释放它,初始保留计数为 1将是图书馆的工作要做。

于 2013-02-17T20:22:19.770 回答