Почему retainCount = 2 - после выпуска? - PullRequest
0 голосов
/ 08 июня 2011

Я использую этот код.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.

    view = [[UIView alloc] init];

    [_window addSubview:view];

    [view release];

    NSLog(@"count - %d", [view retainCount]);

    [self.window makeKeyAndVisible];

    return YES;

}


- (IBAction)click{

    NSLog(@"count - %d", [view retainCount]); 

}

Когда я нажимаю на uibutton - мое представление сохраняет счет = 2. Почему это происходит?

Ответы [ 3 ]

6 голосов
/ 08 июня 2011

Пожалуйста, , не не рассчитывайте на retainCount. Запустите приборы и посмотрите, нет ли утечки. Apple не рекомендует использовать retainCount для отладки:

Важно : Этот метод обычно нет значения в отладочной памяти вопросы управления. Потому что любое число каркасных объектов, возможно, сохранили объект для хранения ссылок к нему, в то же время Автозапуск пулов может проводить любые количество отложенных выпусков на объект, очень маловероятно, что вы может получить полезную информацию из этого способ.

Ознакомьтесь с NSObjectProtocol и документацией retainCount . Прочитайте Руководство по программированию управления памятью для более глубокого понимания количества сохраняемых данных.

1 голос
/ 08 июня 2011

Если я не ошибаюсь, он может быть сохранен _window или другими объектами, поэтому, если вы вызовете [view retainCount]; в dealloc методе, вы, вероятно, получите retain count = 0.

в качестве Ника.Уивер сказал, что не используйте retainCount для обнаружения утечек при отладке проблем с памятью.

0 голосов
/ 08 июня 2011

Лучше мы не против стоимости retainCount. Просто следуйте правилам управления памятью - вступайте во владение, когда они вам нужны, откажитесь от владения, когда закончите, и у вас не возникнет проблем.

Если вы смотрите на retainCount, вы поступаете неправильно, и вы просто запутаетесь.

Единственное правило о количестве раз, которое вы можете сохранить объект, заключается в том, что каждое сохранение должно быть сбалансировано с выпуском.

...