Objective c UITableView在使用非英语(阿拉伯语、汉语、希伯来语、乌尔都语等)文本时滚动缓慢

Objective c UITableView在使用非英语(阿拉伯语、汉语、希伯来语、乌尔都语等)文本时滚动缓慢,objective-c,ios,uitableview,scroll,Objective C,Ios,Uitableview,Scroll,我正在使用iOS 5并制作一个iPad应用程序。我的应用程序中有一个UITableView,其中每个单元格都包含一个UITextView。但是,当非英语文本加载到文本视图时,它会经历非常缓慢的滚动 这是我创建的一个示例项目,用于演示该问题。这将使用UITableView,其中每个UITableViewCell中都有一个带有标记1的UITextView。它的滚动速度非常慢: - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableV

我正在使用iOS 5并制作一个iPad应用程序。我的应用程序中有一个UITableView,其中每个单元格都包含一个UITextView。但是,当非英语文本加载到文本视图时,它会经历非常缓慢的滚动

这是我创建的一个示例项目,用于演示该问题。这将使用UITableView,其中每个UITableViewCell中都有一个带有标记1的UITextView。它的滚动速度非常慢:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 20;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"BasicCellIdentifier";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    UITextView *textView = (UITextView *)[cell viewWithTag:1];
    textView.text = @"أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎. أَبْجَدِيَّة عَرَبِيَّة‎.";
    return cell;
}
我已经使用了NSLog来验证这一行是否单独导致了减速。删除它会使一切工作完美,但我需要设置文本。我已经阅读了所有关于性能调整的资料,但这对我来说仍然是一个巨大的问题

滚动速度慢只是阿拉伯语、汉语、希伯来语等语言的一个问题。与英语、法语、德语(可能与字符集或unicode有关?)相比,5000个字符的英语字符串根本没有速度慢,但200个字符的阿拉伯语字符串却有速度慢


谢谢你的帮助

这里延迟执行的似乎是在可编辑的UITextView中设置长文本

根据讨论,将UITextView设置为不可编辑可提高性能
我建议将其设置为不可编辑,也许稍后将其更改为可编辑

这里延迟执行的似乎是在可编辑的UITextView中设置长文本

根据讨论,将UITextView设置为不可编辑可提高性能

我建议将其设置为不可编辑,也许稍后将其更改为可编辑

阿拉伯长字符串是静态的还是动态的(如从服务器中提取)?字符串是动态的,但在UITableView开始绘图之前已完全加载。在渲染/绘制单元格的过程中,它们根本不会更改。是否要求使用500字符字符串填充单元格?你不能只显示其中的一部分吗?在这种情况下不能,因为用户可以在直接加载到任何行的文本视图中后进行更改。该部分已经针对性能进行了优化,不过为了研究当前问题,我在代码中禁用了该功能,直到解决了滚动速度慢的问题。出于我们的目的,它正在加载全文(请注意,它不需要执行调整大小操作,因为所需的高度已被缓存)。阿拉伯文必须绝对轰炸文本渲染器。。。我想知道您是否可以在核心文本中执行此操作。阿拉伯文长字符串是静态的还是动态的(如从服务器中提取)?字符串是动态的,但在UITableView开始绘图之前已完全加载。在渲染/绘制单元格的过程中,它们根本不会更改。是否要求使用500字符字符串填充单元格?你不能只显示其中的一部分吗?在这种情况下不能,因为用户可以在直接加载到任何行的文本视图中后进行更改。该部分已经针对性能进行了优化,不过为了研究当前问题,我在代码中禁用了该功能,直到解决了滚动速度慢的问题。出于我们的目的,它正在加载全文(请注意,它不需要执行调整大小操作,因为所需的高度已被缓存)。阿拉伯文必须绝对轰炸文本渲染器。。。我想知道你是否可以在核心文本中这样做。不幸的是,这在阿拉伯语中对我不起作用。它可以完美地用英语书写任何数量的文本,但不能用阿拉伯语。你是对的,我刚刚用UITextView测试了它,它确实很慢:这里的问题是,你正在使用UITextView,当从UI线程中调用它时,它会变慢,所以我认为你不能做得更快,您必须实现一个编辑文本的详细视图。我刚刚偶然发现了一件事:如果我在设置文本之前设置textView.editable=NO,然后将其设置回yes,那么根据我的NSLog测试,性能将提高约300%。也许有一种方法可以使用这些黑客作为解决方法?如果代码中仍然有NSLog,请删除它们。他们将是经济放缓的一大部分。不幸的是,这在阿拉伯语中对我不起作用。它可以完美地用英语书写任何数量的文本,但不能用阿拉伯语。你是对的,我刚刚用UITextView测试了它,它确实很慢:这里的问题是,你正在使用UITextView,当从UI线程中调用它时,它会变慢,所以我认为你不能做得更快,您必须实现一个编辑文本的详细视图。我刚刚偶然发现了一件事:如果我在设置文本之前设置textView.editable=NO,然后将其设置回yes,那么根据我的NSLog测试,性能将提高约300%。也许有一种方法可以使用这些黑客作为解决方法?如果代码中仍然有NSLog,请删除它们。它们将是经济放缓的一大部分。