Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Do I have to release a NSLocalizedString?

The question is simple. Do I need to release a NSLocalizedString? For instance:

NSString *internetMessageTitle = NSLocalizedString(
@"You are currently not connected to a internet network"
@"Title of the message that tells the user there is no internet network");

Because I did this:

NSLog(@"Retain count of InternetMessageTitle is: %d", 
                                             [internetMessage retainCount]);

But it prints a retain count of 2. However I have read that the retainCount attribute is not very reliable. Should I release it twice?

And yes I have read the memory management rules and guide of the documentation but I don't see here any indication of NARC (NewAllocRetainCopy). I am still a beginner so I don't really know how NSLocalizedString makes strings.

Thank you!

EDIT1: I use this variable in a UIAlertView I don't know if the retainCount is increased there when I use it. And even when the alert is not used (inside an if, and if the if is skipped it isn't used) the retainCount is still 2 according to NSLog.

like image 334
Joze Avatar asked Jan 21 '23 08:01

Joze


1 Answers

No, you must not release it. If you check how NSLocalizedString is defined you'll see:

#define NSLocalizedString(key, comment) \
        [[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil]

That its normally a call to NSBundle's method that returns autoreleased string

I use this variable in a UIAlertView I don't know if the retainCount is increased there when I use it. And even when the alert is not used (inside an if, and if the if is skipped it isn't used) the retainCount is still 2 according to NSLog.

Yes, labels in UIAlert retain their content strings, but you should not worry about that - they will release them when get destroyed.

like image 160
Vladimir Avatar answered Jan 30 '23 23:01

Vladimir