首页 > 代码库 > 关于iOS上使用WWW引起的内存泄漏的临时解决方案
关于iOS上使用WWW引起的内存泄漏的临时解决方案
原地址: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不会造成内存泄露问题。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。