основанное на представлении приложение - viewcontroller retainCount после [window addSubview: viewController.view]; - PullRequest
1 голос
/ 07 августа 2010

У меня есть приложение, основанное на представлении, и когда я проверил, работает ли метод dealloc, я увидел, что это не ... отладка и отладка, а затем, используя retainCount, я обнаружил, что мой reconcount viewcontroller сходит с ума при запуске программы ...его легко воспроизвести ....

просто запустите новый шаблон приложения на основе представления, и в didFinishLaunchingWithOptions:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    // Override point for customization after app launch. 
 NSLog(@"i1 %i",[viewController retainCount]);
    [window addSubview:viewController.view];
 NSLog(@"i2 %i",[viewController retainCount]);
    [window makeKeyAndVisible];

 return YES;
}

я получил на консоли:

[Session started at 2010-08-07 09:57:34 -0300.]
2010-08-07 09:57:35.132 teste1[20367:207] i1 2
2010-08-07 09:57:35.138 teste1[20367:207] i2 8

это правильно?

затем, когда я нажимаю домашнюю кнопку на iphone, чтобы закрыть приложение, вызываются методы, не требующие решения, я полагаю, потому что viewController's retainCount .... я прав?

Это шаблон приложения вида Apple ... должен работать ... не так ли?

Может кто-нибудь объяснить мне, почему начальный счет 2 равен?а остальные 8 ???файл xib пуст ....

Ответы [ 2 ]

2 голосов
/ 07 августа 2010

Вам не нужно беспокоиться о фактическом количестве сохраняемых объектов, если вы следуете правилам управления памятью. Фреймворк может сохранять или освобождать объекты, так что счетчик будет изменен вне вашего контроля.

1 голос
/ 07 августа 2010

Возможно, вам не разрешат вызывать dealloc при завершении работы приложения.Это не способ проверить.И контроллер корневого представления всегда присутствует в приложении.Вы должны быть обеспокоены другими классами, которые вы создали сами, и быть уверенными, что их dealloc вызывается, когда они должны быть вызваны (не во время завершения).А также не полагайтесь на retainCount.Apple рекомендует использовать его нигде.

Скажем, у вас есть два представления и соответствующие контроллеры представления, кроме корневого контроллера представления.В первом представлении вы создали другие объекты.Теперь при переключении на 2-й вид следует освободить память для 1-го вида, если они не нужны.В этом случае вы должны проверить, что объекты для первого вида действительно освобождены.Если вы закодировали таким образом, но они не были вызваны, значит, должна быть утечка.Но да, вы не должны проверять это после завершения приложения.

...