2012-10-03 39 views
1

由于我在iPhone 4上更新了我的iOS软件,因此我正在开发的应用程序已经开始滞后。这只发生在我给UISearchField输入时。IOS6中的内存分配差异?

当我在iOS键盘上点击30个字母时会发生“滞后”。之后,每次连续敲击都会使手机本身无法处理输入。

我有一个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来绘制。这发生在键盘混合后。

我正确地重复使用单元格(我认为),并没有真正的想法是什么导致了这一点,因为它似乎完美运行在所有iOS版本从4.3到5.1。

我试过不同的方式分配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及其单元格。

现在这个问题已经变得容易处理了。我目前正在实施一个可能的修复。

回答

0

解决方案:

移动代码

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]; 

外的tableview的实际重画的。