У меня есть простое приложение для чтения, которое использует fmdb для общения с базой данных, а затем заполняет UIWebview текстом.После славного появления ios 5 он работает очень плохо ...
Когда я изменяю главы в моей книге через сегментированный контроль.В ios 4.3 это было супер быстро.Теперь, как вы можете видеть ниже, это не так:
Итак, очевидно, что загрузка идет медленно, но я не знаю, как прочитать результаты теста скорости,Какой метод является основным виновником?Что мне нужно сделать, чтобы оптимизировать приложение?Есть ли что-нибудь еще, что я могу сделать, чтобы понять, где именно зависания?
У меня такое сложное время с fmdb и ios 5, что я рассматриваю другие варианты.Должен ли я просто отказаться от fmdb?И пойти на прямой подход ios sqlite db?
Я считаю инструмент инструментов полезным, но очень трудным для понимания и использования.
ОБНОВЛЕНИЕ
Вотизменить метод главы:
- (IBAction) changeChapter:(id)sender {
if ([prevNext selectedSegmentIndex] == 0) {
//previous
[self setCurrentChapter:(currentChapter-1)];
} else {
//next
[self setCurrentChapter:(currentChapter+1)];
}
[self refreshUI];
}
ОБНОВЛЕНИЕ 2:
Вот код, который, как говорят мне инструменты, является проблемой.Это следующий метод, который fmdb использует для перебора FMResultSet:
- (BOOL) next {
int rc;
BOOL retry;
int numberOfRetries = 0;
do {
retry = NO;
rc = sqlite3_step(statement.statement); //Instruments says this is 100% the problem
if (SQLITE_BUSY == rc) {
// this will happen if the db is locked, like if we are doing an update or insert.
// in that case, retry the step... and maybe wait just 10 milliseconds.
retry = YES;
usleep(20);
if ([parentDB busyRetryTimeout] && (numberOfRetries++ > [parentDB busyRetryTimeout])) {
NSLog(@"%s:%d Database busy (%@)", __FUNCTION__, __LINE__, [parentDB databasePath]);
NSLog(@"Database busy");
break;
}
}
else if (SQLITE_DONE == rc || SQLITE_ROW == rc) {
// all is well, let's return.
}
else if (SQLITE_ERROR == rc) {
NSLog(@"Error calling sqlite3_step (%d: %s) rs", rc, sqlite3_errmsg([parentDB sqliteHandle]));
break;
}
else if (SQLITE_MISUSE == rc) {
// uh oh.
NSLog(@"Error calling sqlite3_step (%d: %s) rs", rc, sqlite3_errmsg([parentDB sqliteHandle]));
break;
}
else {
// wtf?
NSLog(@"Unknown error calling sqlite3_step (%d: %s) rs", rc, sqlite3_errmsg([parentDB sqliteHandle]));
break;
}
} while (retry);
if (rc != SQLITE_ROW) {
[self close];
}
return (rc == SQLITE_ROW);
}
FMDB - это все, что я когда-либо знал в отношении sqlite, стоит ли оно того?Должен ли я просто отказаться от этого и перейти на apl's sqlite с какао-прикосновением?