12

I'm a java guy coming over to Objective-C. In java, to add a variable to a string you'd have to do something along the lines of:

someString = "This string is equal to " + someNumber + ".";

I can't figure out how to do it in Objective-C though. I have an NSMutableString that I'd like to add to the middle of a string. How do I go about doing this?

I've tried:

NSString *someText = @"Lorem ipsum " + someMutableString;
NSString *someText = @"Lorem ipsum " + [someMutableString stringForm];

and a few other things, none of which seem to work. Also interchanged the +s with ,s.

4 Answers 4

30

You can use appendString:, but in general, I prefer:

NSString *someText = [NSString stringWithFormat: @"Lorem ipsum %@", someMutableString];
NSString *someString = [NSString stringWithFormat: @"This is string is equal to %d.", someInt];
NSString *someOtherString = [NSString stringWithFormat: @"This is string is equal to %@.", someNSNumber];

or, alternatively:

NSString *someOtherString = [NSString stringWithFormat: @"This is string is equal to %d.", [someNSNumber intValue]];

etc...

These strings are autoreleased, so take care not to lose their value. If necessary, retain or copy them and release them yourself later.

Sign up to request clarification or add additional context in comments.

Comments

8

Try this:

NSMutableString * string1 = [[NSMutableString alloc] initWithString:@"this is my string"];

[string1 appendString:@" with more strings attached"];

//release when done
[string1 release];

Comments

6

You need to use stringByAppendingString

NSString* string = [[NSString alloc] initWithString:@"some string"];
string = [string stringByAppendingString:@" Sweet!"];

Don't forget to [string release]; when your done of course.

4 Comments

Your memory management is messed up. It's the original string created by alloc that you need to release, but you're throwing that away (leaking it) and replacing it with the result of stringByAppendingString:, which should not be released.
I realize that I may be confused by memory management here, but isn't my 2nd statement pointing to the same block of memory, in which I am just reassigning the value to the existing value plus the appended string?
Nope, it's two different different objects at two different memory locations. Plain NSStrings can't change their value, so stringByAppendingString: returns a new string with the original string's value plus the appended value.
Since ARC this would not be a problem anymore?
0
NSMutableString *string = [[NSMutableString alloc] init];

[string appendFormat:@"more text %@", object ];

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.