2011-05-16 70 views
2

我有一个简单的问题。我如何缩短很长的一行。我们使用传统的80个字符。 这是我的代码行:这个Objective-C代码如何缩进?

NSString *count = [[NSString alloc] initWithString: [sTemp substringFromIndex:[sTemp rangeOfString:@"count="].location + [sTemp rangeOfString:@"count="].length]]; 

一种解决方案是

NSString *count = [[NSString alloc]         //line 1 
          initWithString: [sTemp substringFromIndex: 
           [sTemp rangeOfString:@"count="].location + 
           [sTemp rangeOfString:@"count="].length]]; 

这是不是最好的样本,但这个想法是:

  1. 好了,第一行是分配和分配的东西。
  2. 第2行缩进更合适的空间。但是,如果变量或类型的名称非常大,我将会遇到上述情况。我做的事?

    NSStringWithVeryBigType *bigNameVariable = [NSStringWithVeryBigType alloc] 
            initWithString: [sTemp substringFromIndex: 
    
  3. 在第二行我创建了一个新的NSString。如果第3行和第4行(不好的情况,不是这个)是主要功能创建,或者是新创建的,我可能会感到困惑。对此有一个好的规则?如果它也有一个很大的名字,该怎么办...

换句话说,在一个大的任务中,我有什么规则要休耕?

+0

除非你知道你在做什么,否则你不应该继承'NSString'。鉴于这个问题的性质,我会猜测你没有。没有冒犯,但核心类型的分类是一个坏主意。 – 2011-05-16 21:14:56

+0

@Dave:你说得对,但我认为这个问题的一部分更一般;给定一个长名称的任何子类(使用'NSStringWithVeryBigName'作为例子),该怎么办? – 2011-05-16 21:34:06

+0

@Josh一般来说,我只是让Xcode为我处理缩进。如果Xcode 4的文本太长,它会对文本进行换行,或者您可以通过插入换行符来自行分隔文本; Xcode会将行的其余部分缩进到它认为合适的位置。 – 2011-05-16 21:42:56

回答

2

我会做这样的事情:

NSString *count = [[NSString alloc] initWithString: 
    [sTemp substringFromIndex: 
     [sTemp rangeOfString:@"count="].location 
     + [sTemp rangeOfString:@"count="].length]]; 
4

不要试图给它的所有挤入一行。只要你有怪异的嵌套调用,这样,使一个或多个中间变量可读性:

NSRange rng = [sTemp rangeOfString:@"count="]; 
NSUInteger indexAfterCount = rng.location + rng.length; 
NSString * countSubString = [sTemp substringFromIndex:indexAfterCount]; 

NSStringSubclassWithReallyLongName * countString; 
countString = [[NSStringSubclassWithReallyLongName alloc] initWithString:countSubString]; 
+0

哼,好的,可以是个好主意。也许我有问题把“全在一行代码”,我会尝试更多这一点。 – Rodrigo 2011-05-17 00:31:47

3

[sTemp rangeOfString:@"count="]是一个潜在的昂贵的操作,和你这样做两次。您应该将结果缓存在局部变量中。由于您想在找到的范围之后立即启动您的子字符串,因此您可以使用NSMaxRange()来方便地获取该值。同样,使用-copy而不是-initWithString:代替NSString,因为它可以为您带来几乎相同语义的更好性能。所以:

NSRange range = [sTemp rangeOfString:@"count="]; 
NSString *count = [[sTemp substringFromIndex:NSMaxRange(range)] copy];