Освобождаване на скрити предмети?

Пиша приложение на iOS. Имам основен клас и UIView подклас с някои UILabel полета.

Искам да освободя памет, когато обекти от подклас са извън екрана (скривам изгледа чрез анимация). Как мога да направя това?

ViewController.h
#import "Histogram.h"
#import "HistogramDelegate.h"

{
UIScrollView *filtersScrollView;
UITapGestureRecognizer *tapGesture;
UISwipeGestureRecognizer *swipeGesture;
...some UILabels and other components.
Histogram *_Histogram;

}

@property (nonatomic, retain) Histogram *_Histogram;
... other properties
... some functions

@end


ViewController.m
-(void)viewDidLoad {
_Histogram = [[Histogram alloc] initWithFrame:...];
}
-(void)viewDidUnload // here i add nil value to objects, for ex. UIScrollView = nil.

-(void)someFunc {
 [_Histogram hideHistogram];
}

Histogram.h
//some objects/fields like UILabels, UISliders, UIViews


Histogram.m
some functions.
-(void)hideHistogram {

}

Как и къде мога да освободя _Histogram и неговите обекти от паметта, когато са извън екрана? Когато разпределя и стартирам _Histogram и когато скривам _Histogram, приложението ми е по-бавно.


person Tomasz Szulc    schedule 19.01.2012    source източник


Отговори (1)


Въпросът не е много ясен. Във всеки случай, ако искате да попитате как да освободите паметта си, след като вашата хистограма е скрита: тогава това, което трябва да направите, е след извикване на [_histogram _hidden] call [_histogram release]; _histogram=nil; Също така във функцията dealloc на вашия файл histogram.m трябва да освободите всички елементи, които сте инициализирали в този клас. В противен случай освобождаването на _histogram обект не би било от голяма полза

person aqs    schedule 19.01.2012
comment
да, но когато пиша [_Histogram release] имам грешка: 'release' е недостъпен: не е наличен в режим на автоматично броене на препратки: / - person Tomasz Szulc; 19.01.2012
comment
това е така, защото използвате автоматично преброяване на препратки, което по подразбиране е активирано в най-новия Xcode. Така че, ако не искате _хистограма, просто я направете нула. По този начин не се позовавате на него и той ще бъде автоматично освободен. - person aqs; 20.01.2012
comment
когато правя _хистограма = нула; приложението все още е бавно. използвам библиотека S7GraphView в хистограма. Трябва ли да направя нула 3 масива в неговия метод? всички функции на S7GraphView се инициализират в Histogram. може би това прави приложението ми бавно. - person Tomasz Szulc; 20.01.2012
comment
Не съм запознат с библиотеката S&GraphView. Но наистина се съмнявам, че това ви причинява бавността. Ако смятате, че потребителският интерфейс е бавен, това може да се дължи на начина, по който се справяте с нещата в основната нишка. Използването на допълнителна памет никога няма да забави приложението ви. - person aqs; 20.01.2012
comment
трябва да се науча да използвам нишки и ще го проверя. Благодаря за помощта. - person Tomasz Szulc; 21.01.2012