【发布时间】:2009-09-26 18:25:44
【问题描述】:
在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% 正确,但希望问题很清楚。
【问题讨论】:
标签: objective-c