如何测试UIWebView对JavaScript的10MB限制?

时间:2013-09-10 02:51:25

标签: ios uiwebview cordova

我正在尝试测试UIWebView对Javascript内存分配的10MB限制。这是我到目前为止的代码,我正在模拟器(iOS 5.1)上运行。

int size = 10485760+1024000*10; 
int i = 13;
char *cStr = (char *) malloc(size); // 20MB buffer
char *lcStr = cStr;
lcStr+=i;
strcpy(cStr, "window._x = \'");
for ( ; i < size-4; i++){
    if(i%2){
        *lcStr = ' ';
    }else{
        *lcStr = 'c';
    }
    lcStr++;
}
strcpy(lcStr, "c\';\0");

NSString *longStr = [NSString stringWithCString:cStr encoding:NSASCIIStringEncoding];
// by now 40MB used

//memory usage spikes to 60MB
NSString *result = [self.webView stringByEvaluatingJavaScriptFromString: longStr];

free(cStr);

HTML / JS:

<script type="text/javascript">
    setTimeout(function(){document.getElementById("one").innerText = window._x;},3000);
</script>

我的问题是上面的代码不会导致UIWebView抛出任何异常,即使一点上的JS分配明显大于10MB。我用过仪器来验证内存使用情况。

整个程序的最终结果是我看到一堆'c'在webview中打印在屏幕上但没有崩溃。

我做错了吗?我该如何测试这个JS限制?

1 个答案:

答案 0 :(得分:1)

限制因设备而异。模拟器不会施加与实际设备相同的限制。如果你在iPhone上测试它,你会看到一个例外。