0

我在我的标题中定义了一个 const char 像这样

const char *storageIcon;

@property (assign) const char *storageIcon;

我的字典中有一个字符串值,它是单个字符,我很奇怪下面的代码是否以正确的方式将其放入我的变量中?

storageIcon = [[tempDict valueForKey:@"STORAGEICON"] UTF8String];

问题是后来这个元素被破坏了..几乎就像内存泄漏一样,我无法弄清楚出了什么问题。

任何帮助/提示将不胜感激。

4

1 回答 1

1

从文档中NSString UTF8String

返回的 C 字符串会自动释放,就像释放返回的对象一样;如果需要将 C 字符串存储在创建 C 字符串的自动释放上下文之外,则应该复制它。

您正在将此“即将被释放”的 C 字符串指针分配给已分配的属性。基本上价值立即丢失。

您可以正确使用属性的 settermallocfreegetter 方法,也可以使事情变得更容易,并将属性更改为NSStringa 而不是 a const char *

任何需要实际 C 字符串的属性客户端都可以UTF8String根据需要调用该方法。

另一件事。你问题的标题是关于一个字符的。将是char,不是char *。如果您真的只想要 的第一个字符NSString,那么您需要一种与现在不同的方法。

于 2013-03-03T21:48:38.123 回答