gpt4 book ai didi

objective-c - 如何找到引用 Objective-C 对象的位置?

转载 作者:搜寻专家 更新时间:2023-10-30 19:49:26 26 4
gpt4 key购买 nike

我在 Xcode 中使用分配工具来跟踪正在创建但未释放的对象。我可以看到对象计数随着代码的执行而增加,我可以看到使用调用堆栈在何处创建对象,但我无法确定对象引用保存在何处。我认为它们保存在第 3 方库中,但开发人员说“不,它必须是你的代码”。我将代码中的引用设置为 nil,但对象仍然存在。

最佳答案

我认为没有一种工具可以告诉您每个引用在任何时间点的位置。当您使用 ARC 时,根据我的经验,有两种相当常见的方法会让您陷入引用循环和内存泄漏:

  1. A 类强引用了 B 类的一个实例,而 B 类又强引用了 A 类的同一个实例。
  2. block 隐式保留对其捕获的对象的引用。因此,一个明显的陷阱是当您的对象保留一个 block 时,该 block 保留对 self 的引用。

示例:

self.retainedBlock = ^{
[self doSomething];
};

修复:

__weak id weakSelf = self;
self.retainedBlock = ^{
id strongSelf = weakSelf;
[strongSelf doSomething];
};

关于objective-c - 如何找到引用 Objective-C 对象的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13982080/

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