1) Whenever you create a string using the @"" syntax, the structure automatically caches the string. NSString is a very special class, but the framework will take care of that. When you use @"Some String" in several places in your application, they will all point to the same address in memory. Only when you use something like -initWithData:encoding will the string not be cached.
2) Other answers suggested using -copy instead, but -copy will only create a copy of the object if the object is modified. (e.g. NSMutableString)
When you send -copy to an immutable object (like NSString), it will be the same as sending -retain , which returns the object itself.
NSString *originalString = @"Some String"; NSString *copy = [originalString copy]; NSString *mutableCopy1 = [originalString mutableCopy]; NSString *mutableCopy2 = [mutableCopy copy]; NSString *anotherString = [[NSString alloc] initWithString:originalString];
-> originalString , copy , mutableCopy2 and anotherString will point to the same memory address, only mutableCopy1 points occupy a different memory area.
source share