gpt4 book ai didi

Objective-C:如何判断哪个其他对象保留了特定对象?

转载 作者:行者123 更新时间:2023-12-04 03:02:07 24 4
gpt4 key购买 nike

在 Objective C 中,是否有一种方法可以在运行时确定,如果一个对象被保留,那么哪个其他对象可能会保留该对象?

或者换个说法:

如果狗身上有皮带,是否可以知道谁拉着皮带?

假设您有这个假设场景:

我的对象一

我的对象二

MyObjectTwo 的实现是这样的

- (void)setFirstObject:(MyObjectOne *)firstObj {
[firstObj retain];
// do stuff with object and under certain conditions don't release it
}

现在在代码的其他地方可能有其他地方创建和保留对象

// Create the two objects
myFirstObject = [[MyObjectOne alloc] init];
mySecondObject = [[MyObjectTwo alloc] init];

// ...
// Some process requires retaining the first object
[myFirstObject retain]

// ...
// some other place requires passing the first object to the second object
// at which point the first object is retained by the second object
[mySecondObject setFirstObject:myFirstObject];

// ...
// further on the first object is released
[myFirstObject release]

此时理论上 myFirstObject 的保留计数应该为 1,因为它保留在 MyObjectTwo 中。是否也有可能知道保留对象的是什么?换句话说,可以知道 myFirstObject 的保留计数为 1,并且它当前由 mySecondObject 保留。有没有一种方便的方法可以找到这些信息?是否有可能像这个伪代码一样工作的条件代码:

if (MyObjectTwo is retaining MyObjectOne)
{
// do something in particular
}

更进一步,假设 myFirstObject 的保留计数大于 1,并且还有其他对象 MyObjectThree 和 MyObjectFour,它们的行为与 MyObjectTwo 相似,因为它们具有可以保留 MyObjectOne 的方法。现在假设有多个 MyObjectTwo、MyObjectThree 和 MyObjectFour 实例,其中一些保留了第一个对象,一些则没有。有没有办法知道谁在做保留?

仍在学习中,所以我的语法可能不是 100% 正确,但希望问题很清楚。

最佳答案

不,你不能那样做。对象不会跟踪谁保留了它们,并且并不总是有这样的对象,因为您可以从没有关联对象的普通 C 函数内部调用 retain

如果你想跟踪谁在保留一个对象,你需要自己做。每次保留时,您都会将自己添加到保留者列表中,例如被保留对象中的 NSArray

我不确切知道您要做什么,但几乎可以肯定您的做法是错误的。大多数时候,弄清楚谁在保留什么并不是一件真正有用的事情,而且可能有更好的方法来做你想做的事。

关于Objective-C:如何判断哪个其他对象保留了特定对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1481836/

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