在Objective-C中,有什麼方法可以找出哪些對象是保留另一個對象的對象?確定誰握住對象
例如,我有一個MyClass對象的集合,如果我遍歷它們以獲得每個對象的保留計數,我可以看到計數爲2.如何找出持有者是誰?
for (NSString *aKey in aDictionaryOfMyObjects)
{
MyClassObject *myClassObj = [aDictionaryOfMyObjects objectForKey:aKey];
// following shows a retain count of 2. Presumably, the first count is
// due to myClassObj is held as the value in NSDictionary and second is because I
// I just acquired a pointer to it above. I'd like to find out who exactly
// might have references to myClassObj.
NSLog(@"retain count = %d", [myClassObj retainCount]);
}
爲了擴大格雷厄姆所說的話:保留點數最多是不可靠的。他們對目標的記憶管理情況給出了一幅悲慘的不完整的圖像。如果你僅僅依靠它們來獲得更多的補充信息,那麼你最終會傾向於風車。 – Chuck 2010-10-23 21:00:05
分配工具還可以跟蹤所有的保留/釋放/自動釋放事件,並會向您顯示其中任何一個被調用的位置。比使用調試器要容易得多,比dtrace還要自動化得多。 – bbum 2010-10-31 18:29:14