可可触摸 – 是否有必要使用弱引用自我总是在块…?

可可触摸 – 是否有必要使用弱引用自我总是在块…?,第1张

概述我很困惑与使用自我内部块,我通过一些苹果的文档,但仍然找不到正确的答案。 有些人总是说使用弱自我内部块,但有些人说使用弱自我的块被复制,不是永远使用总是。 样品1: self.handler = ^(id response, NSError *error){ self.newresponse = response; //use weak self here}; 样品2: 使用弱自我; 我很困惑与使用自我内部块,我通过一些苹果的文档,但仍然找不到正确的答案。

有些人总是说使用弱自我内部块,但有些人说使用弱自我的块被复制,不是永远使用总是。

样品1:

self.handler = ^(ID response,NSError *error){    self.newresponse = response; //use weak self here};

样品2:

使用弱自我;

__weak myVIEwController *weakSelf = self;[UIVIEw animateWithDuration:interval delay:0.0 options:curve animations:^{    [weakSelf.vIEw.supervIEw settransform:CGAffinetransformMakeTranslation(0,-106)];    //in above is it use of weak is neassary }completion:^(BOol finished){}];

没有弱自我;

__weak myVIEwController *weakSelf = self;[UIVIEw animateWithDuration:interval delay:0.0 options:curve animations:^{    [myVIEwController.vIEw.supervIEw settransform:CGAffinetransformMakeTranslation(0,-106)];}completion:^(BOol finished){}];

在上面的例子中,哪些是正确的…?
**我使用ARC

解决方法 你应该只使用一个弱引用自我,如果self将持有块的引用。

在你的例子中,你不是在self中引用你的块,你只是使用块内联UIVIEw animateWithDuration :,因此没有必要使用__weak myVIEwController * weakSelf = self;

为什么会这样?因为一个块将保留对它使用的任何变量的强引用。这包括自我。现在如果类实例本身保持对块的强引用,并且块保持对类实例的强引用,那么您将有一个保留周期,这将导致内存泄漏。

总结

以上是内存溢出为你收集整理的可可触摸 – 是否有必要使用弱引用自我总是在块…?全部内容,希望文章能够帮你解决可可触摸 – 是否有必要使用弱引用自我总是在块…?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1046099.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存