我对objective-c有些新意,我不确定这段代码的正确内存管理是什么。
const unsigned char * data =(const unsigned char *) [string UTF8String];
当我拨打免费数据时,我收到错误消息。这次通话后我需要清理吗?
答案 0 :(得分:10)
没有。 “UTF8String”不包含alloc
,copy
,retain
或create
字样。因此,你不对那段记忆负责。
请注意,如果您希望在string
发布后保留这些数据,则应复制它;根据合同,您不对该记忆负责,但您也不能保证它将超出提供给您的对象的范围。
答案 1 :(得分:2)
您不需要free
。
在Cocoa中,如果方法不包含单词alloc
,init
或copy
,则您不拥有从所述方法返回的对象。
-UTF8String
实际上指向到您调用它的cstring
对象的NSString
表示。当对象的状态发生变化时,UTF8String
也会发生变化。
答案 2 :(得分:2)
如documentation中所述,它会自动释放自动释放对象的方式。
答案 3 :(得分:0)
从技术上讲,free()用于从堆中删除使用malloc()分配的内存。 malloc()不用于分配内存。记住,objective-c是带有扩展名的c。 数据变量将根据c语言的“范围”规则保留在内存中。