我想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 *
只需使用以下方法:
autorelease
d 对象:/**
* 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
禁用则应该调用该方法),因为该类根本不打算拥有该实例。
retain
ed 对象: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]
.