【发布时间】:2017-08-21 08:46:54
【问题描述】:
我正在编写一个统一插件来将原生 iOS 功能连接到 Unity。
我必须做的一件事是将字符串从 Objective-C(iOS) 发送回 C#(Unity),这是通过编写一个简单的 C 外部函数来完成的。
我找到了这篇文章:
https://forum.unity3d.com/threads/plugins-sending-string-data.66435/
建议使用这个可以通过C extern返回的辅助函数:
// Helper method to create C string copy
char* MakeStringCopy (const char* string)
{
if (string == NULL)
return NULL;
char* res = (char*)malloc(strlen(string) + 1);
strcpy(res, string);
return res;
}
我对 Unity 不是很精通,所以我不知道这是否会导致内存泄漏。
从纯Objective-C的角度来看,函数
- 接受一个字符指针
- 根据原字符串的长度分配一些内存空间
- 将原始字符串复制到这个新分配的空间中
- 返回新复制的指针
辅助函数在 C 外部函数中使用如下:
return cStringCopy([objc_status UTF8String]);
所以原始字符串使用的内存是由Objective-C自动管理的,但是...
Unity一旦收到char指针,会自动释放分配的内存吗?
C# unity 脚本使用如下函数:
string someInfo = SDKWrapper_getInfo();
这个问题的答案:
How to convert between a C# String and C Char pointer
有点与此有关(我认为),所以这真的让我觉得我这里有内存泄漏。
【问题讨论】:
-
您可能想阅读有关返回
char *的答案:stackoverflow.com/q/370079/996081
标签: c# ios objective-c c memory-leaks