IOS7中引入Javascriptcore的UIWebview的ARC问题

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

这个项目是关于在javascript和原生objc方法之间进行通信的。我听说苹果在IOS7中引入了JavascriptCore。下面是我的html示例

<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