原地址:http://www.unity蛮牛.com/thread-16493-1-1.html
目前,在的4.3.3.和4.3.4版本中存在一个iOS平台上的内存泄漏问题,即当使用WWW来下载和加载Assetbundle文件时,如果按照以下方式来进行,则会造成Assetbundle卸载后内存不能完全释放的情况。
对此,Unity官方已经就该问题进行了修复,并在下一个版本中进行更新。但对于目前仍在使用4.3.3和4.3.4两个版本上进行开发的项目,建议使用以下的临时解决方案,具体步骤如下:
目前,在unity的4.3.3.和4.3.4版本中存在一个iOS平台上的内存泄漏问题,即当使用WWW来下载和加载Assetbundle文件时,如果按照以下方式来进行,则会造成Assetbundle卸载后内存不能完全释放的情况。对此,Unity官方已经就该问题进行了修复,并在下一个版本中进行更新。但对于目前仍在使用4.3.3和4.3.4两个版本上进行开发的项目,建议使用以下的临时解决方案,具体步骤如下:
1.将Unity工程发布成Xcode工程;
2.在生成的Xcode工程中找到文件:Classes/Unity/WWWConnection.mm;
3.打开并查找函数: “extern ”C“ void UnityDestroyWWWConnection(void* connection)”;
4. 将该函数做如下修改;
修改前:
[AppleScript] 纯文本查看 复制代码extern“C”voidUnityDestroyWWWConnection(void* connection)
{
UnityWWWConnectionDelegate* delegate = (UnityWWWConnectionDelegate*)connection;
[delegate.connection cancel];
delegate.connection = nil;
[delegate release];
}
修改后:
[AppleScript] 纯文本查看 复制代码
extern“C”voidUnityDestroyWWWConnection(void* connection)
{
UnityWWWConnectionDelegate* delegate = (UnityWWWConnectionDelegate*)connection;
[delegate cleanup];
[delegate release];
}
5.接下来需要再添加一个cleanup函数,具体做法是先查找函数:
[AppleScript] 纯文本查看 复制代码
“- (void)connection:(NSURLConnection*)connection
didReceiveResponse:(NSURLResponse*)response”
然后在该函数的上方插入cleanup函数,函数内容如下:
- (void)cleanup
{
[_connection cancel];
_connection = nil;
[_data release];
_data = nil;
}
6.经过上述修改,正常发布到设备上即可。
说明:
1、该问题仅存在于iOS平台;
2、该问题仅存在于4.3.3和4.3.4两个版本上,4.3.2及之前版本并不存在该问题;
3、另一常用加载API:WWW. LoadFromCacheOrDownload不会造成内存泄露问题。
关于iOS上使用WWW引起的内存泄漏的临时解决方案