iPhone 4でiOSソフトウェアを更新してから、開発中のアプリが遅れ始めました。これは、UISearchFieldに入力を与えているときにのみ発生します。
「ラグ」は、iOSキーボードで約30文字をタップしたときに発生します。その後、連続するすべてのタップが遅れて、電話自体が入力を処理できなくなったように感じます。
検索フィールドに3文字以上を入力するたびに、データベースに対してSelectsを実行するUISearchDisplayControllerがあります。
ここにいくつかのコードがあります。
実際の検索
-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
if ([searchText length] >= 3)
{
if (searchObject != nil)
{
searchObject = nil;
searchObject = [[FritextSok alloc]init];
[searchObject setDelegate:self];
}
[searchObject setSearchstring:searchText];
[searchObject search];
}
else
{
// Displays non filtered results.
}
}
iOS6シミュレーターの実行中にもこれが発生しています。
また、iOSキーボードの「ラグ」は別として。さまざまなビューコントローラのすべてのUISegmentedControlは、描画にFOREVERを要するようです。これは、キーボードのマッシュ後に発生します。
私はセルを適切に再利用していますが(私は思う)、4.3から5.1までのすべてのiOSバージョンで完全に動作しているように見えるため、これを引き起こしている原因は実際にはわかりません。
searchObjectを割り当てるさまざまな方法を試しました。何も役に立たないようです。
編集
これは散発的に表示されるエラーメッセージです
purgeIdleCellConnections: found one to purge conn = <Memory address>
編集2
PROFILERツールを使用してさらに試行錯誤した後。このブロックのおかげで、生きている記憶が絶えず増加していることを発見しました。
UISegmentedControl *segment = [[UISegmentedControl alloc] init];
segment.frame = CGRectMake(0, 0, 70, 32);
segment.selectedSegmentIndex = -1;
segment.segmentedControlStyle = UISegmentedControlStyleBar;
segment.tintColor = [UIColor colorWithRed:0.745 green:0.184 blue:0.216 alpha:1];
segment.momentary = YES;
segment.alpha = 0.9;
[segment insertSegmentWithTitle:@"Ta bort" atIndex:0 animated:NO];
[segment addTarget:self action:@selector(foo:) forControlEvents:UIControlEventValueChanged];
上記のブロックは、UISearchFieldに文字を入力するたびに実行されます。UISearchDisplayDelegateが-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
関数に対してYESを返しているため。これにより、UITableViewとそのセルが再描画されます。
この問題は、やや扱いやすくなりました。そして、私は現在、可能な修正を実装しています。