Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

yrvaken2

macrumors newbie
Original poster
Sep 15, 2008
12
0
Can someone please explain the diffrence of the following and when to use what..?

Code:
 NSString *string = [[NSString alloc] initWithFormat:@"hello"];

and

Code:
 NSString *string = @"hello";

I am struggling a bit to get the hang of this memory efficient programing with releasing objects and stuff.
 
Code:
 NSString *string = [[NSString alloc] initWithFormat:@"hello"];
//vs.
NSString *string = @"hello";

They differ in terms of memory management and flexibility. The second method, @"hello" , is a literal string - you don't need to retain or release it. It will always be around. Handy for creating constants. Even if you use this line in a loop, you are NOT creating a new object every time. There's only one @"hello" .

The first one - the alloc/init - creates a new NSString object for you, which you manage (retain/release) as appropriate. Also, the init method you chose, initWithFormat, can take a format string a list of variables - so if you need to combine a list of variables into a string, you can use:
Code:
string = [[NSString alloc] initWithFormat:@"I lost my %@ in %@", bodyPart, city];
You can't do that with the @ method - literal strings are defined when the program is compiled, not when it's running.

I'd use the @"Hello" wherever I have a string that will always be the same every time I run my program, and the longer form whenever I need to construct a string that will be different every time I run my program.
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.