どちらか
NSString *myString; //this is just a variable identifier, no object was created and assigned to it yet
...
//scanner will create a NSString and write it to myString. It won't know it is passed to a variable typed NSMutableString or NSString
[scanner scanUpToCharactersFromSet:charSet intoString:&myString];
//instead of creating mutable string you can create a new immutable by appending a string
myString = [myString stringByAppendingString:@"hello"];
以上: 次のコード スニペットを参照してください
NSMutableString *myString; //this is just a variable identifier, no object was created and assigned to it yet
...
//scanner will create a NSString and write it to myString. It won't know it is passed to a variable typed NSMutableString
[scanner scanUpToCharactersFromSet:charSet intoString:&myString];
//myString contains a NSString now, not NSMutableString
myString = [myString mutableCopy]; // make a mutable copy and assign it to the variable
[myString appendString:@"hello"];
2 番目のアプローチでは、NSMutable 型付き変数がしばらくの間、不変の文字列を保持するという矛盾が生じます。これは間違いなく欠陥です。解決策 1 は、はるかにクリーンです。2 つを優先する場合は、2 つ目の NSString 変数を導入し、それをスキャナーに渡し、その可変コピーを NSMutableString に渡す必要があります。
NSString *tempString;
NSMutableString *myString;
...
[scanner scanUpToCharactersFromSet:charSet intoString:&tempString];
myString = [tempString mutableCopy];
[myString appendString:@"hello"];