gpt4 book ai didi

ios - 当使用 ARC 的对象包含多个非 ARC 对象时会发生什么?

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:08:49 25 4
gpt4 key购买 nike

我有一个使用 ARC 的 A 类和不使用 ARC 的其他 B 类和 C 类。如果 A 包含 B 类对象而 B 包含 C 类对象,那么 ARC 如何工作以及当 B 类和 C 类中的内存管理处理不当时会发生什么情况?

最佳答案

我同意 Mike 和 Martin 的观点,非 ARC 对象在 ARC 类中的集成通常是无缝进行的(假设您已将 -fno-objc-arc 编译标志添加到那些.m 文件不是 ARC 或在使用手动引用计数编译的库中)。

需要注意的是,ARC 依赖于符合 Basic Memory Management Rules 中概述的方法命名规则的代码。 .因此,您的非 ARC 代码必须遵守这些方法命名规则,否则 ARC 可能无法正确处理生成的对象。如果非 ARC 代码遵循长期存在的方法命名约定(以 allocnewcopy、和 mutableCopy 将返回 +1 对象,否则从方法返回的对象将是 autorelease 对象),所以这通常不是问题。但是,如果您的非 ARC 代码不遵循此方法命名约定,则在将此非 ARC 代码与您的 ARC 类集成时,它可能会成为内存管理的绊脚石。

如果非 ARC 代码不符合这些命名约定,您要么必须重命名方法,更正代码的内存管理以对应于方法名称,要么为代码不符合的编译器提供提示遵守这些方法命名规则(例如 NS_RETURNS_RETAINEDNS_RETURNS_NOT_RETAINED)。

关于ios - 当使用 ARC 的对象包含多个非 ARC 对象时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18873353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com