繁体   English   中英

在带有ARC的Objective-C中,您可以保证关联对象的生命周期吗?

[英]In Objective-C with ARC, can you guarantee the lifetime of associated objects?

我看过很多代码,这些代码使用关联的对象对对象进行dealloc清理。

例如NSObject + BlockObservation

其中一些代码是在ARC之前编写的。

现在,在浏览有关ReactiveCocoa的问题时,我发现了以下问题: https : //github.com/ReactiveCocoa/ReactiveCocoa/pull/580

引用:

现在,将Dealloc一次性用品分解成一个混乱的-dealloc ,而不是作为关联的对象(这会在以后发生,并且可能导致使用后使用错误)。

那么,我们是否可以继续使用关联对象来进行诸如ARC下的自动观察删除之类的工作,还是在ARC下破坏此类代码?

http://www.opensource.apple.com/source/objc4/objc4-493.9/runtime/objc-runtime-new.mm

说明:

void *objc_destructInstance(id obj) 
{
    if (obj) {
        Class isa_gen = _object_getClass(obj);
        class_t *isa = newcls(isa_gen);

        // Read all of the flags at once for performance.
        bool cxx = hasCxxStructors(isa);
        bool assoc = !UseGC && _class_instancesHaveAssociatedObjects(isa_gen);

        // This order is important.
        if (cxx) object_cxxDestruct(obj);
        if (assoc) _object_remove_assocations(obj);

        if (!UseGC) objc_clear_deallocating(obj);
    }

    return obj;
}

这段代码基本上是-[NSObject dealloc]实现的主要部分。 换句话说,在释放“所有者”对象之前或多或少地释放了关联的对象,因此您唯一希望对这些对象起作用的是NSObject提供的功能。

幸运的是,KVO和NotificationCenter都允许您说出“名称(读取地址)”并成为NSObject来注销,所以我希望一切都很好。

我认为ARC与该讨论毫无关系。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM