Как освободить объекты, находящиеся в Xib, в iphone

В моем файле .h создайте 3 объекта, как показано ниже.

IBOutlet UIScrollView *scrollView;
IBOutlet UITextView *txtMessage;
IBOutlet UIWebView *webView;

В xib сделайте соединение для всех 3 объектов иерархии в xib, например

**View 
       ---UIScrollView
            ---UITextView
            ---UIWebView**

затем я печатаю continueCount в методе Dealloc

NSLog(@"scrollView retainCount:%d",[scrollView retainCount]);
    [scrollView release];scrollView=nil;
NSLog(@"txtMessage retainCount:%d",[txtMessage retainCount]);
    [txtMessage release];txtMessage=nil;
NSLog(@"webView retainCount:%d",[webView retainCount]);
    [webView release];webView=nil;

на консоли я получаю как показано ниже

scrollView retainCount:3
txtMessage retainCount:2
webView retainCount:2

Я хочу знать, почему это происходит так, и еще одна вещь, как можно освободить эти объекты в методе Dealloc...


person Narayana    schedule 30.09.2011    source источник
comment
Правило номер 1 в управлении памятью: если вы ее не сохранили/не выделили, не освобождайте ее. В вашем случае ничего делать не нужно. Не заморачивайтесь над сохранением счетчиков. Просто сбалансируйте сохранение/инициализацию с автоматическим выпуском/выпуском в своем коде, и вы не столкнетесь с проблемами.   -  person Daryl Teo    schedule 30.09.2011
comment
Вы установили свойства в трех представлениях?   -  person Rams    schedule 30.09.2011
comment
если запустить мое приложение с потерей производительности, если я перейду на страницу с подробными сведениями, выделение памяти увеличится на 0,90 МБ и вернется к основному виду, оно не уменьшится до старого распределения.   -  person Narayana    schedule 30.09.2011
comment
keepCount бесполезен. Не звони.   -  person bbum    schedule 30.09.2011


Ответы (2)


Ответ таков: вы их не отпускаете. Вы не выделили] init] тогда, они не являются вашей ответственностью за память. Единственный случай, когда они так или иначе находятся под вашей ответственностью, — это когда вы сохраняете их, используя @property (retain) для IBOutlets. В этом случае вы выпустите их в [dealloc]

Отвечая на ваш комментарий в другом ответе об инструментах и ​​​​освобождении выходов, которые создает xib: если вы их отпустите, то представление когда-нибудь будет выгружено, и ответственность за освобождение элементов в .xib (что это не было вами) будет отпустите их снова, и произойдет сбой;) Причина, по которой вы возвращаетесь к другому представлению, а память не уменьшается, заключается в том, что, когда представление исчезает, оно не выгружается, что происходит только тогда, когда освобождается контроллер представления или когда приложение получает предупреждение о памяти.

person Javier Soto    schedule 30.09.2011
comment
Можете ли вы объяснить, почему keepCount отличается для объектов в xib? - person Narayana; 30.09.2011

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

person SmallChess    schedule 30.09.2011
comment
если запустить мое приложение с потерей производительности, если я перейду на страницу с подробными сведениями, выделение памяти увеличится на 0,90 МБ и вернется к основному виду, оно не уменьшится до старого распределения. - person Narayana; 30.09.2011