2013-07-07 4 views
1

Я новичок в объективе-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]; 
} 

ответ

1

Вы просто работаете с указателем на фактическую строку. Оба метода используют этот указатель, чтобы они обращались к одному и тому же объекту в памяти.

+0

Хорошо, потому что я прихожу из Java. И если бы я передал String методу и работал над ним, он просто изменился бы в рамках этого локального метода. Но это, вероятно, потому, что java создает новую строковую ссылку, если я делаю замену ... – krackmoe

+1

Право. Строка Java эквивалентна NSString Objective-C, которая неизменна. –

0

Метод validateAccessCode: вызывается с помощью sender, которая предположительно является объект пользовательского интерфейса, который имеет текстовое поле. Этот метод меняет текст в поле, когда он вызывает replaceCharachters:, поэтому нет необходимости возвращать что-либо.