Можете ли вы отправить счет удержания в NSLog для помощи в обучении? - PullRequest
2 голосов
/ 11 сентября 2009

Просто любопытно, есть ли возможность отображать счетчики объектов, используя NSLog. Я просто хочу распечатать их на консоли, чтобы узнать, как retain / release работает в некотором простом коде?

ура -gary-

Ответы [ 3 ]

9 голосов
/ 11 сентября 2009

Это не только возможно, но и очень просто:

NSLog(@"retain count=%d",[obj retainCount]);
2 голосов
/ 05 января 2010

Я думаю, что вы можете столкнуться с проблемой с NSString, когда сообщения сохранения и выпуска могут быть отправлены на строковую константу, но они на самом деле не влияют и не изменяют объекты retainCount. Приведенный ниже код работает, измените его на использование NSString и удерживайте / освобождайте его действие.

Код:

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    NSMutableString *myString = [[NSMutableString alloc] initWithString:@"AB"];
    NSLog(@"RC: %d", [myString retainCount]);
    [myString retain];
    NSLog(@"RC: %d", [myString retainCount]);

    [myString release];
    NSLog(@"RC: %d", [myString retainCount]);
    [myString release];

    [pool drain];
    return 0;
}

Выход:

Running…
TESTBED[12306:a0f] RC: 1
TESTBED[12306:a0f] RC: 2
TESTBED[12306:a0f] RC: 1

1009 * Гэри *

0 голосов
/ 11 сентября 2009

В консоли отладчика вы можете ввести: print (unsigned int) [thing retainCount]

...