Getting NSString from char * (Converting C’s char-pointer)

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.

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)