To create an NSString
from a const char *
, simply use these methods:
Returns an autorelease
d object:
/** * Should be wrapped in `@autoreleasepool {...}`, * somewhere not far in call-stack * (as closer it's, the lower our memory usage). */NSString *stringFromChar(const char *input) { return [NSString stringWithUTF8String: input];}
Whenever we
return
an object (maybe toSwift
), we need to register into nearest@autoreleasepool
block (by callingautorelease
method to prevent memory-leak, according to ownership-rules), butARC
does that automatically for us.
But even with ARC
disabled, we are NOT forced to call autorelease
manually, like:
return [[NSString stringWithUTF8String: name] autorelease];
Generally, convenience factory methods (like
stringWithUTF8String:
), already call theautorelease
method (or should ifARC
disabled), because the class simply does not intend to own the instance.
Creates a retain
ed object:
NSString *result = [[NSString alloc] initWithUTF8String: name];// ... Do something with resulted object.// NOTE: calling below is not required// (If ARC enabled, and should cause compile error).[result release];
Update 2021 about difference; With
ARC
enabled, these two methods are equivalent (i.e.ARC
will auto-callautorelease
method; always registering to nearest@autoreleasepool
).
If you are not getting the correct value, then something is wrong with the data. Add a few NSLog
calls to see what the strings contain.