IOS7中引入Javascriptcore的UIWebview的ARC问题
这个项目是关于在javascript和原生objc方法之间进行通信的。我听说苹果在IOS7中引入了JavascriptCore。下面是我的html示例IOS7中引入Javascriptcore的UIWebview的ARC问题,javascript,ios7,uiwebview,Javascript,Ios7,Uiwebview,这个项目是关于在javascript和原生objc方法之间进行通信的。我听说苹果在IOS7中引入了JavascriptCore。下面是我的html示例 <html> <head> </head> <body> <script> function test2() { TASK.test2(); } </script> <for
<html>
<head>
</head>
<body>
<script>
function test2()
{
TASK.test2();
}
</script>
<form>
<button type='button' onclick='TASK.test()'>Test</button>
</form>
</body>
</html>
运行程序,一切正常,但当我弹出这个viewcontroller时。发现它不是dealloc,有些东西是保留它的。我尝试了几种方法来解决这个问题
方法1,删除html中的scrtpt标记。去掉这个
<script>
function test2()
{
TASK.test2();
}
</script>
我很确定它是由javascript上下文保留的。但哪一部分是错的??
非常感谢我终于拿到了。
而不是这个
ctx[@"TASK"] = self;
我一个接一个地做
ctx[@"TAST_test1"] = ^{
Code goes here
};
ctx[@"TAST_test2"] = ^{
Code goes here
};
如果您将self的属性
self
或实例传递给您的JSContext,那么您将进入一个retain循环
ctx[@"TASK"] = self.task; // don´t do, that leaks
ctx[@"TASK"] = self; // that also leaks
要以舒适的方式直接从JavaScript调用TASKExports
协议中声明的函数,必须传递一个“干净且不保留”的实例。这是避免循环的唯一方法
ctx[@"TASK"] = [[Task alloc] init]; // that´s the way
要与运行类的上下文交互,还可以使用委派:
ctx[@"TASK"] = [[Task alloc] initWithDelegate:self]; // also works with blocks
我也在做同样的事情。
ctx[@"TASK"] = self.task; // don´t do, that leaks
ctx[@"TASK"] = self; // that also leaks
ctx[@"TASK"] = [[Task alloc] init]; // that´s the way
ctx[@"TASK"] = [[Task alloc] initWithDelegate:self]; // also works with blocks