Quantcast
Channel: User trojanfoe - Stack Overflow
Viewing all articles
Browse latest Browse all 217

Answer by trojanfoe for Getting NSString from char * (Converting C's char-pointer)

$
0
0

To create an NSString from a const char *, simply use these methods:

Returns an autoreleased 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 to Swift), we need to register into nearest @autoreleasepool block (by calling autorelease method to prevent memory-leak, according to ownership-rules), but ARC 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 the autorelease method (or should if ARC disabled), because the class simply does not intend to own the instance.

Creates a retained 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-call autorelease method; always registering to nearest @autoreleasepool).

Reference.

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.


Viewing all articles
Browse latest Browse all 217

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>