1

自从我在 iPhone 4 上更新了我的 iOS 软件后,我正在开发的应用程序开始出现滞后。这仅在我向 UISearchField 提供输入时才会发生。

当我在 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 来绘制。这发生在键盘混搭之后。

我正在正确地重用单元格(我认为)并且不知道是什么原因造成的,因为它似乎可以在从 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 及其单元格。

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

4

1 回答 1

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 的实际重新绘制之外。

于 2012-10-17T11:13:26.120 回答