Getting NSString from char * (Converting C's char-pointer)
ios, iphone, objective-c
Solution
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 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 `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-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.
Problem
I want to show the `char *` in the `UITextField` What I tried: ``` char *data; char *name=data+6; txtName.text=[[NSString alloc] initWithCString:name encoding:NSUTF8StringEncoding]; ``` but I am not getting the correct value.