Poc*_*chi 5 c c# memory-leaks objective-c ios
我正在编写一个统一插件来将原生 iOS 功能连接到 Unity。
我必须做的一件事是将字符串从 Objective-C(iOS) 发送回 C#(Unity),这是通过编写一个简单的 C extern 函数来完成的。
我找到了这个帖子:
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;
}
Run Code Online (Sandbox Code Playgroud)
我对 Unity 不是很精通,所以我不知道这是否导致内存泄漏。
从纯Objective-C的角度来看,函数
辅助函数在 C extern 函数中使用,如下所示:
return cStringCopy([objc_status UTF8String]);
Run Code Online (Sandbox Code Playgroud)
所以原始字符串使用的内存由Objective-C自动管理,但是......
一旦Unity收到char指针,它会自动释放分配的内存吗?
C# unity 脚本使用如下函数:
string someInfo = SDKWrapper_getInfo();
Run Code Online (Sandbox Code Playgroud)
这个问题的答案:
有点与此有关(我认为),所以它真的让我觉得我在这里有内存泄漏。
是的,这会泄漏内存。解决方案是将托管内存块(即 a StringBuilder)传递给本机函数,即:
[DllImport(...)]
private static extern int GetInfo
([MarshalAs(UnmanagedType.LPWStr)]StringBuilder dst, int dstCapacity);
private void SomeMethod()
{
var sb = new StringBuilder(8192);
// perhaps the function can indicate whether the capacity was large enough
var success = GetInfo(sb, sb.Capacity);
}
Run Code Online (Sandbox Code Playgroud)
您可以在此页面上看到类似的示例。
| 归档时间: |
|
| 查看次数: |
511 次 |
| 最近记录: |