请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

Block 中 strongSelf 的问题

图片描述

老师, 可以解答下 为什么有的时候 block 用 weakself 就行, 而有的时候要在 用 strong 修饰下呢,

正在回答 回答被采纳积分+3

5回答

清风淡墨白 2021-12-04 15:50:14

简单说为了在调用block的时候,防止weakself被释放为nil,所以block里面加强一下 

0 回复 有任何疑惑可以回复我~
瞅瞅 2019-11-27 19:38:47

我理解的外部__weak修饰,就如视频所说,是为了block捕获变量的弱引用,避免循环引用,避免内存泄漏。

内部__strong修饰,则是为了增加该变量的引用计数,避免其被提前释放,尤其在多线程切换的时候。否则后续的访问会出现野指针。

0 回复 有任何疑惑可以回复我~
  • 补充:
    内部__strong修饰,可以在执行到block的时候增加该变量的引用计数,避免在block执行时变量被释放,尤其在多线程切换的时候。否则后续的访问会出现野指针。block执行结束时,会执行[strongSelf release]。
    回复 有任何疑惑可以回复我~ 2020-03-11 09:41:16
  • hazel_zzz 回复 j_________ #2
    “__strong __typeof(weakSelf)strongSelf = weakSelf;”如果weakSelf为nil,那strongSelf也会为nil。所以strongSelf只能保证当weakSelf有值的情况下,之后self都不会被释放。请问这么理解对么?
    回复 有任何疑惑可以回复我~ 2020-05-05 11:16:03
提问者 qq_老虎_daniu 2019-05-15 22:56:16

https://img1.sycdn.imooc.com//szimg/5cdc28610001ff9414920492.jpg

还有就是老师, 有的时候, 为啥 还能用 self 呢,  这是sdwebimage里的代码

0 回复 有任何疑惑可以回复我~
  • dispatch_async的block不会造成循环引用
    回复 有任何疑惑可以回复我~ 2021-12-04 15:51:13
提问者 qq_老虎_daniu 2019-05-15 19:23:36

有的在Block 里边 用了 

__strong typeof(weakSelf) strongSelf = weakSelf;

, 不知道什么时候用 这个 

0 回复 有任何疑惑可以回复我~
提问者 qq_老虎_daniu 2019-05-15 19:21:53

//img1.sycdn.imooc.com//szimg/5cdbf6390001ed6214800578.jpgAFnetworking 中的用法

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信