我正在尝试测试 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 ' 打印在 web 视图的屏幕上,但没有崩溃。
难道我做错了什么?如何测试这个 JS 限制?