У меня очень простое приложение. С главного экрана я запускаю новый вид («вид обучения»), который отображает изображение и метку. в режиме обучения есть кнопка меню и следующая кнопка. Когда пользователь нажимает следующую кнопку, представление обновляет изображение и метку из массива char * строк C. Однако, когда я делаю это, распределение инструментов показывает постоянно увеличивающееся количество распределений, которые не уменьшаются, когда представление уничтожается нажатием кнопки меню. Если я просто отображаю представление обучения, затем нажимаю на меню, проблем нет, выделения увеличиваются, а затем возвращаются к предыдущему уровню, но если я щелкаю следующее обновление label.text, то производятся распределения, которые не восстанавливаются. Приборы не сообщают об утечках. Вот соответствующие фрагменты кода:
LearnVC.h
@interface LearnVC : UIViewController {
IBOutlet UIImageView *imageView;
IBOutlet UILabel *labelView1;
NSInteger page;
}
@property (retain, nonatomic) UIImageView *imageView;
@property (retain, nonatomic) UILabel *labelView1;
@property NSInteger page;
- (IBAction)handleNext;
- (IBAction) gotoMenu;
@end
LearnVC.m
#import ...
char *states[] { "Alabama", "Alaska", "Arizona", ... };
#define maxStates 50
@implementation LearnVC
@synthesize ...
- (void)viewDidLoad
{
NSString *tstring;
self.page = 0;
//test!!!!
tstring = [[NSString alloc] initWithCString:states[self.page] encoding:NSUTF8StringEncoding];
labelView1.text = tstring;
[tstring release];
[super viewDidLoad];
}
- (IBAction) handleNext {
NSString *tstring;
self.page++;
if (self.page > maxStates-1) {
self.page = 0;
}
//test!!!!
tstring = [[NSString alloc] initWithCString:states[self.page] encoding:NSUTF8StringEncoding];
labelView1.text = tstring;
[tstring release];
}
- (void)dealloc
{
[imageView release];
[labelView1 release];
[super dealloc];
}
Похоже, это происходит каждый раз, когда я обновляю представление, не удаляя (не освобождая) его и не добавляя заново. Есть ли что-то со старыми массивами Си, которые не копируются / не выпускаются должным образом. Или какая-то проблема со свойствами UILabel.text, которые не освобождают память? Любая помощь приветствуется.
Заранее спасибо, Нил
Я преобразовал его для использования NSArray -
Я добавил это в .h файл
NSArray *statesArray;
и
@property (retain, nonatomic) NSArray * statesArray;
затем в .m файле
в viewDidLoad
NSArray *objects = [NSArray arrayWithObjects:@"Alabama", @"Montgomery",
@"Alaska", @"Juneau" ,..., nil];
self.statesArray = objects;
//I assume that since I didn't init it, I don't need to release objects.
labelView1.text = [self.statesArray objectAtIndex:self.page];in dealloc
[statesArray release];
Тогда в моей ручкеСледующий
labelView1.text = [self.statesArray objectAtIndex:self.page];
Я пробегаю весь массив, выхожу, перезагружаюсь и т. Д. и ассигнования увеличиваются в первый раз, но прекращают расти после того, как я однажды прошел список. Это было не так с массивом char *, должно быть, что-то еще происходит, ну да ладно, мне просто нужно избавиться от своих старых способов C и придерживаться классов NS / UI.
Кажется, это решило проблему. Теперь я поработаю над загрузкой изображения и посмотрю, работает ли оно так же.