在 iOS Cordova 项目中处理内存管理?
Handling memory Management and in iOS Cordova project?
谁能告诉我如何使用"Received memory warning"
在基于iOSCordova的项目中处理内存管理
当我的 iPhone 或 iPad(版本 8.1)上的 运行 时,我在 iOS Cordova 项目中收到此警告。我正在使用 CDVlocation 进行地理定位应用程序。我主要是在加载基于 views.I 的地图时收到此消息,我正在使用基于 ARC 的 Xcode 项目
任何帮助使用 cordova "Received memory warning" 管理内存警告将不胜感激。
谢谢大家
在CDVPlugin.m
中尝试这种方式
- (void)onMemoryWarning
{
// override to remove caches, etc
NSLog(@"onMemoryWarning");
NSString * javascriptString = @"yourJSFunctionToManageMemoryWarnings();";
[self.webView stringByEvaluatingJavaScriptFromString:javascriptString];
}
当您的 iOS 应用程序收到 Received memory warning
通知时,iOS 正在尝试回收尽可能多的内存,因为某些应用程序需要它。该应用程序可能是您,也可能是其他人。发生这种情况时,所有当前正在执行的应用程序(不仅仅是您的应用程序)都会收到此通知,并且每个应用程序都应通过释放尽可能多的未使用内存来做出响应。由于 Javascript 进行自己的内存管理,Cordova 应用程序真正能做的就是通过将变量设置为 null(或某个小值)来取消引用内存,因此 myHugeGlobalObject = null;
、myArrayOfOneMillionThings = [];
等,这样垃圾收集器就可以在下次运行时释放该内存。因此,当您收到 Received memory warning
通知时,这就是您应该做的。
在 CDVPlugin.m 中,您可以像这样将 iOS 通知发送到您的 Javascript 应用程序:
- (void)onMemoryWarning
{
// override to remove caches, etc
NSLog(@"CVPlugin.m: Got onMemoryWarning notification");
NSString * javascriptString = @"yourJSFunctionToManageMemoryWarnings();";
[self.webView stringByEvaluatingJavaScriptFromString:javascriptString];
}
然后在你的Javascript中(在index.html
中):
<script>
function yourJSFunctionToManageMemoryWarnings() {
console.log("yourJSFunctionToManageMemoryWarnings() was called");
myHugeGlobalObject = null;
myArrayOfOneMillionThings = [];
}
</script>
听起来在您的特定情况下 iOS 正在尝试使内存可用,因为您的应用程序需要它(以便加载地图视图)并且您会做的就是您会做的通常这样做:如上所述释放未使用的内存,当其他人也礼貌地做同样的事情时,您将获得您的内存。
也就是说,如果您在尝试加载地图视图时遇到超出此处描述的某种类型的内存不足情况,您可能需要研究一些高级 Javascript 内存管理技术就像对象池 (http://www.html5rocks.com/en/tutorials/speed/static-mem-pools/) 一样,你基本上可以在启动时获取你期望的所有内存,然后你知道你会在需要的时候拥有它。
谁能告诉我如何使用"Received memory warning"
在基于iOSCordova的项目中处理内存管理当我的 iPhone 或 iPad(版本 8.1)上的 运行 时,我在 iOS Cordova 项目中收到此警告。我正在使用 CDVlocation 进行地理定位应用程序。我主要是在加载基于 views.I 的地图时收到此消息,我正在使用基于 ARC 的 Xcode 项目
任何帮助使用 cordova "Received memory warning" 管理内存警告将不胜感激。
谢谢大家
在CDVPlugin.m
中尝试这种方式 - (void)onMemoryWarning
{
// override to remove caches, etc
NSLog(@"onMemoryWarning");
NSString * javascriptString = @"yourJSFunctionToManageMemoryWarnings();";
[self.webView stringByEvaluatingJavaScriptFromString:javascriptString];
}
当您的 iOS 应用程序收到 Received memory warning
通知时,iOS 正在尝试回收尽可能多的内存,因为某些应用程序需要它。该应用程序可能是您,也可能是其他人。发生这种情况时,所有当前正在执行的应用程序(不仅仅是您的应用程序)都会收到此通知,并且每个应用程序都应通过释放尽可能多的未使用内存来做出响应。由于 Javascript 进行自己的内存管理,Cordova 应用程序真正能做的就是通过将变量设置为 null(或某个小值)来取消引用内存,因此 myHugeGlobalObject = null;
、myArrayOfOneMillionThings = [];
等,这样垃圾收集器就可以在下次运行时释放该内存。因此,当您收到 Received memory warning
通知时,这就是您应该做的。
在 CDVPlugin.m 中,您可以像这样将 iOS 通知发送到您的 Javascript 应用程序:
- (void)onMemoryWarning
{
// override to remove caches, etc
NSLog(@"CVPlugin.m: Got onMemoryWarning notification");
NSString * javascriptString = @"yourJSFunctionToManageMemoryWarnings();";
[self.webView stringByEvaluatingJavaScriptFromString:javascriptString];
}
然后在你的Javascript中(在index.html
中):
<script>
function yourJSFunctionToManageMemoryWarnings() {
console.log("yourJSFunctionToManageMemoryWarnings() was called");
myHugeGlobalObject = null;
myArrayOfOneMillionThings = [];
}
</script>
听起来在您的特定情况下 iOS 正在尝试使内存可用,因为您的应用程序需要它(以便加载地图视图)并且您会做的就是您会做的通常这样做:如上所述释放未使用的内存,当其他人也礼貌地做同样的事情时,您将获得您的内存。
也就是说,如果您在尝试加载地图视图时遇到超出此处描述的某种类型的内存不足情况,您可能需要研究一些高级 Javascript 内存管理技术就像对象池 (http://www.html5rocks.com/en/tutorials/speed/static-mem-pools/) 一样,你基本上可以在启动时获取你期望的所有内存,然后你知道你会在需要的时候拥有它。