关于iOS上使用WWW引起的内存泄漏的临时解决方案
时间:2014-05-26 11:51:24
收藏:0
阅读:377
原地址: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不会造成内存泄露问题。
评论(0)