У меня есть приложение, которое использует запросы данных и отображает их в UITableView. Пока все хорошо, я могу получить доступ к базе данных SQLite и отобразить данные в таблице, но после небольшого периода использования памяти моего приложения получил предупреждение. Уровень = 1 и закрыт. Используя инструменты анализа в поиске, я заметил, что данные моего приложения занимают разумное количество памяти.
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
return [count count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
iMapDadosClientes *dadosClientes = (iMapDadosClientes *)[count objectAtIndex:indexPath.row];
NSString *myIdent = @"myIdent";
iMapGrid *grid = (iMapGrid *)[tableView dequeueReusableCellWithIdentifier:myIdent];
tvDadosClientes.autoresizesSubviews = YES;
if (grid == nil) {
grid = [[[iMapGrid alloc] initWithFrame:CGRectZero reuseIdentifier:myIdent] autorelease];
UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(0.0, 0, 50.0, tableView.rowHeight)] autorelease];
[grid addColumn:60];
label.tag = TAG_1;
label.font = [UIFont systemFontOfSize:14.0];
label.text = dadosClientes.cod;
label.textAlignment = UITextAlignmentRight;
label.textColor = [UIColor blackColor];
label.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleHeight;
[grid.contentView addSubview:label];
label = [[[UILabel alloc] initWithFrame:CGRectMake(70.0, 0, 20.0, tableView.rowHeight)] autorelease];
[grid addColumn:100];
label.tag = TAG_2;
label.font = [UIFont systemFontOfSize:14.0];
label.text = dadosClientes.loja;
label.textAlignment = UITextAlignmentCenter;
label.textColor = [UIColor blackColor];
label.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleHeight;
[grid.contentView addSubview:label];
label = [[[UILabel alloc] initWithFrame:CGRectMake(110.0, 0, 350.0, tableView.rowHeight)] autorelease];
[grid addColumn:470];
label.tag = TAG_3;
label.font = [UIFont systemFontOfSize:14.0];
label.text = dadosClientes.nome;
label.textAlignment = UITextAlignmentLeft;
label.textColor = [UIColor blackColor];
label.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleHeight;
[grid.contentView addSubview:label];
label = [[[UILabel alloc] initWithFrame:CGRectMake(480.0, 0, 240.0, tableView.rowHeight)] autorelease];
[grid addColumn:730];
label.tag = TAG_4;
label.font = [UIFont systemFontOfSize:14.0];
label.text = dadosClientes.mun;
label.textAlignment = UITextAlignmentLeft;
label.textColor = [UIColor blackColor];
label.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleHeight;
[grid.contentView addSubview:label];
label = [[[UILabel alloc] initWithFrame:CGRectMake(740.0, 0, 20.0, tableView.rowHeight)] autorelease];
[grid addColumn:768];
label.tag = TAG_5;
label.font = [UIFont systemFontOfSize:14.0];
label.text = dadosClientes.est;
label.textAlignment = UITextAlignmentCenter;
label.textColor = [UIColor blackColor];
label.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleHeight;
[grid.contentView addSubview:label];
}
UILabel *label_1 = (UILabel *)[grid.contentView viewWithTag:TAG_1];
label_1.text = dadosClientes.cod;
UILabel *label_2 = (UILabel *)[grid.contentView viewWithTag:TAG_2];
label_2.text = dadosClientes.loja;
UILabel *label_3 = (UILabel *)[grid.contentView viewWithTag:TAG_3];
label_3.text = dadosClientes.nome;
UILabel *label_4 = (UILabel *)[grid.contentView viewWithTag:TAG_4];
label_4.text = dadosClientes.mun;
UILabel *label_5 = (UILabel *)[grid.contentView viewWithTag:TAG_5];
label_5.text = dadosClientes.est;
return grid;
}
- (void) getInitialDataToDisplay:(NSString *)dbPath {
count = [[NSMutableArray alloc] init];
if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) {
const char *sql = "select cod, loja, nome, mun, est from apsa1010;";
sqlite3_stmt *selectstmt;
if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK) {
while(sqlite3_step(selectstmt) == SQLITE_ROW) {
iMapDadosClientes *dadosClientes = [[iMapDadosClientes alloc] cod:[NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 0)] loja:[NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 1)] nome:[NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 2)] pessoa:nil ender:nil bairro:nil mun:[NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 3)] est:[NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 4)] tel:nil bco1:nil risco:nil classe:nil lc:nil transp:nil ultCom:nil statCli:nil metr:nil salDup:nil uligTlv:nil dCompra:nil vend:nil celul:nil fax:nil email:nil contato:nil dtCada:nil priCom:nil dtNac:nil dtFunda:nil recno:nil];
[count addObject:dadosClientes];
[dadosClientes release];
dadosClientes = nil;
}
}
sqlite3_finalize(selectstmt);
}
else
sqlite3_close(database); //Even though the open call failed, close the database connection to release all the memory.
}
- (void) finalizeStatements {
if(database)
sqlite3_close(database);
}
кто-то намекнул, что я могу делать неправильно в своем коде. Спасибо.