2009-07-07 88 views
1

目前我正在研究一款软件,该软件目前使用iPhone 3.0 SDK在Objective-C中编写为100%。Objective-C字符串操作

我已经来到了一个十字路口,我需要做相当多的或字符串连接,更具体地说,NSString的级联和到目前为止,我一直在做这样的:

Objective-C的字符串连接:现在

NSString *resultantString = (NSMutableString*)[@"Hello " stringByAppendingString: @"World"]; 

,你可以想像这变得相当困难,当我试图串联6个NSString的共同阅读。

起初我设想一个Objective-C++类混合做我的字符串连接,并交回给我的Objective-C类的话,我可以使用C++的简单的字符串连接,如:

C++字符串连接:

string cppString = "Hello" + "World" + "see" + "easy!"; 

我可以使用ç字符数组,但是这将是一个小更难以阅读。

然后,它让我感到我可以在Cocoa中使用Python或Ruby桥(它提供了正则表达式和卓越的字符串处理比C语言的额外好处)。

即使我只编写了少量的Ruby和Python,这对我来说也是有意义的,因为它们被称为字符串操作语言。 Perl我决定跳过,因为它在Xcode中不直接支持。

我也对性能感兴趣,所以我正在寻找最快的方式来做我的字符串连接。

那我该怎么办?有没有一些狡猾的简单方法,我在Objective-C中错过一次说10个字符串连接很多字符串?或者我的想法是使用Python或Ruby类方法返回连接的或正则表达式的修改过的字符串,而不是听起来那么令人难以置信的疯狂?也许我甚至错过了另一种方式来做到这一点?

更新: 是的。看起来我想拉动另一个语言运行时来执行字符串操作是非常疯狂的,特别是因为我注意到我关心速度。添加一个桥可能会比简单地使用NSString/NSMutableString慢得多。

+1

我觉得使用一个完整的动态语言运行时只是为了做字符串连接就像是过度反应,不是吗? 但我敢肯定,你可以找到其他用途.. – fortran 2009-07-07 18:01:08

+0

我认为,虽然你可以在iPhone上使用C++,但python和ruby由于'没有解释语言'规则而被禁止使用 – cobbal 2009-07-07 18:09:54

+0

@fortran - :)当你这样说我开始认为我的2AM理念并不好。我明天会醒来,读这个问题,并且可能为了甚至首先考虑这个问题而sla myself自己。 – 2009-07-07 18:14:17

回答

9

对于固定大小的拼接,可以使用[NSString stringWithFormat:]像:

NSString *str = [NSString stringWithFormat:@"%@ %@ %@", 
            @"Hello", @"World", @"Yay!"]; 
4

你见过NSMutableString类的appendString方法吗?同一类

appendFormat会让你做许多串连的一个说法,如果这是你真正感兴趣

+0

乔纳森看起来不错。我对Cocoa比较陌生,所以我错过了这个方法。仍然对其他人想法如何混合正则表达式和一般字符串操作的其他语言感兴趣。 ta – 2009-07-07 18:06:40

9

你可以使用连接操作。

NSArray *chunks = ... get an array, say by splitting it; 
string = [chunks componentsJoinedByString: @" :-) "]; 

会产生类似 接力:-) :-) ACK博克:-) :-) greeble小马

3

我会避免混合语言,特别是如果你不知道Python或Ruby好。你在Objective-C的可读代码中获得的东西,你将不得不阅读多种语言来理解你自己的代码库。似乎对我来说是一个可维护性的噩梦。

我强烈建议您直接在Objective-C中采取如何做到这一点的建议之一。

2

仅仅为此拖拽C++似乎相当笨拙。像其他人所说的那样,在NSString上使用stringWithFormat:或在appendFormat:上使用NSMutableString更自然,不会特别难于阅读。另外,为了在Cocoa中使用字符串,你必须添加额外的代码来从C++字符串中来回转换。