正确的内存管理[string UTF8String]

时间:2010-04-29 20:29:49

标签: iphone objective-c nsstring

我对objective-c有些新意,我不确定这段代码的正确内存管理是什么。

const unsigned char * data =(const unsigned char *) [string UTF8String];

当我拨打免费数据时,我收到错误消息。这次通话后我需要清理吗?

4 个答案:

答案 0 :(得分:10)

没有。 “UTF8String”不包含alloccopyretaincreate字样。因此,你不对那段记忆负责。

请注意,如果您希望在string发布后保留这些数据,则应复制它;根据合同,您不对该记忆负责,但您也不能保证它将超出提供给您的对象的范围。

答案 1 :(得分:2)

您不需要free

在Cocoa中,如果方法不包含单词allocinitcopy,则您不拥有从所述方法返回的对象。

-UTF8String实际上指向到您调用它的cstring对象的NSString表示。当对象的状态发生变化时,UTF8String也会发生变化。

答案 2 :(得分:2)

documentation中所述,它会自动释放自动释放对象的方式。

答案 3 :(得分:0)

从技术上讲,free()用于从堆中删除使用malloc()分配的内存。 malloc()不用于分配内存。记住,objective-c是带有扩展名的c。 数据变量将根据c语言的“范围”规则保留在内存中。