我在标题中定义了一个const char,如此
const char *storageIcon;
@property (assign) const char *storageIcon;
我的词典中有一个字符串值,这是一个单个字符,我想知道下面的代码是否正确地将它放入我的变量?
storageIcon = [[tempDict valueForKey:@"STORAGEICON"] UTF8String];
事情就是后来这个元素被破坏了......几乎就像内存泄漏一样,我无法弄清楚什么是错误的。
非常感谢任何帮助/提示。
答案 0 :(得分:1)
来自NSString UTF8String
的文档:
返回的C字符串会自动释放,就像释放返回的对象一样;如果需要将C字符串存储在创建C字符串的自动释放上下文之外,则应复制C字符串。
您正在为指定的属性分配此“即将被释放”的C字符串指针。基本上价值就会立刻消失。
您可以使用属性的setter和getter方法正确使用malloc
和free
,或者让事情变得更容易,并将属性更改为NSString
而不是const char *
。
需要实际C字符串的属性的任何客户端都可以根据需要调用UTF8String
方法。
另一件事。你问题的标题是关于单个角色的。这将是char
,而不是char *
。如果你真的只想要NSString
的第一个字符,那么你需要的方法与你现在所做的不同。