3

我需要一些帮助来理解下面的代码片段。具体来说,我想知道为什么在调用copy时使用关键字。methodBmethodA

+ (NSString*) methodA {

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentsDirectory, 
                                                         NSUserDomainMask, YES);
    return [paths objectAtIndex:0];
}

+ (NSString*) methodB:(NSString*)stringToAppend {

    static NSString *s = nil;
    if(!s) s = [[self methodA] copy];

    return [s stringByAppendingString:stringToAppend];
}

旁注:显然类方法可以调用其他类方法使用self(而实例方法必须调用这样的类方法[ClassName classMethodName];

4

2 回答 2

2

如果从 methodA 返回的 NSString 实际上是 NSMutableString,则 MethodB 调用 copy。

副本只是为了安全。知道在使用该字符串时没有任何内容会改变该字符串的内容,您会感到安全。

当您不希望它们可变时,这是处理可能可变的对象的常用技术。

于 2011-08-05T17:40:28.067 回答
0

是什么paths[0]?假设你的意思是[paths objectAtIndex: 0],你至少应该自动释放它。然后您仍然可以将其复制到methodB:.

您返回的字符串methodB:已经自动释放,所以很好。

于 2011-08-05T17:40:25.853 回答