Определите, кто держится за объект - PullRequest
2 голосов
/ 23 октября 2010

В 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]);
}

Ответы [ 2 ]

3 голосов
/ 23 октября 2010

Вы не можете. Вы можете установить действие для точки останова на -retain, чтобы вы могли наблюдать, когда оно вызывается в режиме реального времени, или вы можете использовать dtrace для достижения той же цели. Но вы не можете работать в обратном направлении от объекта к его владельцам.

В общем, вы все равно не должны полагаться на подсчет удержаний. Вы должны полагаться на правила, написанные в рекомендациях Apple по управлению памятью для Objective-C.

0 голосов
/ 23 октября 2010

Вы не можете.И эта информация обычно не имеет для вас никакого значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...