我想char *在UITextField
我尝试了什么:
char *data;
char *name=data+6;
txtName.text=[[NSString alloc] initWithCString:name encoding:NSUTF8StringEncoding];
但我没有得到正确的价值。
我想char *在UITextField
我尝试了什么:
char *data;
char *name=data+6;
txtName.text=[[NSString alloc] initWithCString:name encoding:NSUTF8StringEncoding];
但我没有得到正确的价值。
要从 a 创建一个NSString,const char *只需使用以下方法:
autoreleased 对象:/**
* 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];
}
每当我们
return一个对象(可能是Swift)时,我们需要注册到最近的@autoreleasepool块中(通过调用autorelease方法来防止内存泄漏,根据所有权规则),但是ARC会自动为我们注册。
但即使ARC禁用,我们也不会被迫autorelease手动调用,例如:
return [[NSString stringWithUTF8String: name] autorelease];
通常,便利工厂方法(如
stringWithUTF8String:)已经调用该autorelease方法(或者如果ARC禁用则应该调用该方法),因为该类根本不打算拥有该实例。
retained 对象: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];
2021 年关于差异的更新;启用后,这
ARC两种方法是等效的(即ARC会自动调用autorelease方法;总是注册到最近的@autoreleasepool)。
参考。
如果你没有得到正确的值,那么数据有问题。添加一些NSLog调用以查看字符串包含的内容。
你能指望什么?您有一个未初始化的 char*。然后将 6 添加到指针,这已经是未定义的行为。然后你尝试将一个指向任何旧垃圾的指针(你不知道它指向哪里)指向一个 NSString*。没有什么好事可以由此而来。
使用 ASCII 或 UTF-8 编码定义一个指向实际的、真实的 C 字符串的 char*。然后像这样创建一个 NSString:
char* cstring = "Try harder";
NSString* objcstring = @(cstring);
您可以使用[NSString stringWithUTF8String: data].