Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 为过滤器组织objective-C字符串_Iphone_Objective C - Fatal编程技术网

Iphone 为过滤器组织objective-C字符串

Iphone 为过滤器组织objective-C字符串,iphone,objective-c,Iphone,Objective C,如何更好地组织此字符串以获得最佳编码实践。它是一个定义过滤器的字符串: NSString* string3 = [[[[[[tvA.text stringByReplacingOccurrencesOfString:@"\n" withString:@" "] stringByReplacingOccurrencesOfString:@"&" withString:@"and"] stringByReplacingOccurrencesOfString:@"garçon" withStr

如何更好地组织此字符串以获得最佳编码实践。它是一个定义过滤器的字符串:

NSString* string3 = [[[[[[tvA.text stringByReplacingOccurrencesOfString:@"\n" withString:@" "] stringByReplacingOccurrencesOfString:@"&" withString:@"and"] stringByReplacingOccurrencesOfString:@"garçon" withString:@"garcon"] stringByReplacingOccurrencesOfString:@"Garçon" withString:@"Garcon"] stringByReplacingOccurrencesOfString:@"+" withString:@"and"] stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
有没有办法做到:

NSString* string3 = [[[[[tvA.text filter1] filter2] filter3] filter4] filter5] stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];

我要做的第一件事是将转换捕获到某个方法中(其中“某处”是适当对象上的实例方法或实用程序类上的类方法)

然后:

有点野蛮,但会管用的。我所说的“粗野”是指它会很慢,并且会导致一堆临时字符串堆积在自动释放池中。然而,如果这是你只是偶尔做的事情,不要担心——虽然很残忍,但肯定很简单

但是,如果这在性能分析中显示为瓶颈,您可以首先使用
NSMutableString
,因为它有适当的替换方法。这至少会减少内存波动,而且可能会更快一些,因为对字符串的复制更少

如果这仍然太慢,那么您可能需要为自己编写一段有趣的解析和处理代码,遍历原始代码并将其复制到新字符串中,同时还要进行任何必要的转换


但是,在证明这是一个问题之前,不要麻烦优化。当然,如果这是一个问题,你只有一个方法来优化

我要做的第一件事是将转换捕获到某个方法中(其中“某处”是适当对象上的实例方法或实用程序类上的类方法)

然后:

有点野蛮,但会管用的。我所说的“粗野”是指它会很慢,并且会导致一堆临时字符串堆积在自动释放池中。然而,如果这是你只是偶尔做的事情,不要担心——虽然很残忍,但肯定很简单

但是,如果这在性能分析中显示为瓶颈,您可以首先使用
NSMutableString
,因为它有适当的替换方法。这至少会减少内存波动,而且可能会更快一些,因为对字符串的复制更少

如果这仍然太慢,那么您可能需要为自己编写一段有趣的解析和处理代码,遍历原始代码并将其复制到新字符串中,同时还要进行任何必要的转换


但是,在证明这是一个问题之前,不要麻烦优化。当然,如果这是一个问题,你只有一个方法来优化

如果性能不重要,请将字符串及其替换项放入
NSDictionary
中,并迭代这些项。将其全部放在一个助手方法中,并使用
NSMutableString
对其进行处理(这至少降低了一些成本)。

如果性能不重要,请将字符串及其替换项放入
NSDictionary
中,并对这些项进行迭代。将其全部放在一个helper方法中,并使用
NSMutableString
对其进行处理(这至少降低了一些成本)。

在百分比转义之前,不应该替换&and+。问题是StringByAddingPercentescapesusingEncode:(IIRC)添加了最小转义以使其成为“有效”URL字符串,而您希望转义可能具有特殊解释的任何内容。为此,请使用CFURLCreateStringByAddingPercentEscapes():


这将正确地编码&和+,而不仅仅是将它们更改为“和”。它还将新行编码为%0a(因此您可能希望用空格替换它们;这是您的要求),并将ç编码为%C3%A7(如果您在服务器上使用UTF-8,则会正确解码)。

在百分比转义之前不应替换&and+。问题是StringByAddingPercentescapesusingEncode:(IIRC)添加了最小转义以使其成为“有效”URL字符串,而您希望转义可能具有特殊解释的任何内容。为此,请使用CFURLCreateStringByAddingPercentEscapes():


这将正确地编码&和+,而不仅仅是将它们更改为“和”。它还将新行编码为%0a(因此您可能希望用空格替换它们;这是您的要求),并将ç编码为%C3%A7(如果您在服务器上使用UTF-8,则会正确解码)。

如果您发现自己想要/需要动态转换字符串的内容,您可能想看看NSScanner:您可以通过在方法的开头创建一个新池并在返回之前将其排空来缓解自动释放池中堆积的对象的问题。如果您确实发现自己想要/需要动态转换字符串的内容,您可能想看看NSScanner:您可以通过在方法开始时创建一个新池并在返回前将其排空来缓解自动释放池中堆积的对象的问题。hi-tc-这很好,但当输入任何换行符时,它会使应用程序崩溃。我怎样才能做到这一点?我应该说,当输入任何“退货”时。这是对数据库的完美输入,但当应用程序试图加载数据时,它崩溃了。你是如何“加载”数据的?错误信息是什么?为什么在将字符串放入数据库之前要“过滤”它们?如果是手机上的数据库,只需使用预先准备好的语句即可。hi-tc-这很好用,但当输入任何新行时,它会使应用程序崩溃。我怎样才能做到这一点?我应该说,当输入任何“退货”时。这是对数据库的完美输入,但当应用程序试图加载数据时,它崩溃了。你是如何“加载”数据的?错误信息是什么?为什么在将字符串放入数据库之前要“过滤”它们?如果是电话里的数据库,就用事先准备好的语句。
- (NSString *) transformString: (NSString *) aString
{
    NSString *transformedString;

    transformedString = [aString stringByReplacingOccurrencesOfString:@"\n" withString:@" "];
    transformedString = [transformedString stringByReplacingOccurrencesOfString:@"&" withString:@"and"];
    transformedString = [transformedString stringByReplacingOccurrencesOfString:@"garçon" withString:@"garcon"];
    transformedString = [transformedString stringByReplacingOccurrencesOfString:@"Garçon" withString:@"Garcon"];
    transformedString = [transformedString stringByReplacingOccurrencesOfString:@"+" withString:@"and"];
    transformedString = [transformedString stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];

    return transformedString;
}
NSString *result = [myTransformer transformString: tVA.text];
return [(NSString*)CFURLCreateStringByAddingPercentEscapes(NULL, (CFStringRef)aString, NULL, (CFStringRef)@":/?#[]@!$&'()*+,;=", kCFStringEncodingUTF8) autorelease];