NSMutuableString修改

问题描述:

我是新来的Objective-C,我不完全理解,为什么以下工作。 为什么我不必从私有方法返回字符串,以便在validateAcessCode方法中字符串将被更改? 是否因为NSMutuableString在本地方法中使用与我传递给它的字符串相同的引用?这是原因吗?NSMutuableString修改

- (void)replaceCharachters:(NSMutableString *)code { 
    [code replaceOccurrencesOfString: @"J" withString: @"a" options:0 range:NSMakeRange(0, [code length])]; 
    [code replaceOccurrencesOfString: @"H" withString: @"b" options:0 range:NSMakeRange(0, [code length])]; 
    [code replaceOccurrencesOfString: @"Y" withString: @"c" options:0 range:NSMakeRange(0, [code length])]; 
} 

-(IBAction)validateAccessCode:(id)sender { 

    NSMutableString *code = [NSMutableString stringWithFormat:@"%@", accessCode.text]; 
    [self replaceCharachters:code]; 
} 

你只是在使用一个指向实际字符串的指针。两种方法都使用该指针,以便他们访问内存中的同一个对象。

+0

好吧,因为我来自Java。如果我将一个字符串传递给一个方法并对其进行处理,它只会在本地方法的范围内进行更改。但这可能是因为java创建一个新的字符串引用,如果我做一个替换... – krackmoe

+1

正确。 Java字符串相当于Objective-C的NSString,它是不可变的。 –

validateAccessCode:方法正在由sender这大概是具有文本字段的UI对象调用。当它调用replaceCharachters:时,此方法正在更改字段中的文本,因此不需要返回任何内容。