iOS开发-SDWebImage的回调不addSubView不会调用

  let lhhImageView = UIImageView()


        lhhImageView.sd_setImage(with: URL(string: "http://ww3.sinaimg.cn/mw690/51f76ed7jw1e3ohzmmnffj.jpg")) { (image, error, cacheType, imageURL) in
            print("width:" + "\(image?.size.width)" + "height:" + "\(image?.size.height)")
        }


        self.view.addSubview(lhhImageView)

以上一段代码是swift3.0中获取图片大小的方法,通过SD的回调获取,博主在使用时发现一个bug,如果去掉addSubView这一句代码,回调里面的内容是不会打印的,也就是不执行,但是在OC中是没有问题的,好奇怪啊,具体原因还不清楚,以后找到了会补充,这里暂时贴出来。

下面有人评论说是指针的问题,因为没有addSubView,所以指针指向为nil,查看了苹果关于addSubView的API

-(void)addSubview 官方API说明: 
Adds a view to the end of the receiver’s list of subviews. 
- Discussion: 
This method establishes a strong reference to view and sets its next responder to the receiver, which is its new superview. 
Views can have only one superview. If view already has a superview and that view is not the receiver, this method removes the previous superview before making the receiver its new superview.
翻译
添加视图至当前视图的子视图中的最顶层 ,这个方法建立一个强引用至要添加的视图,并设置他的下一响应者到他的父视图. 视图只可以拥有一个父视图.如果视图已经有一个父视图,之前的父视图不再是接受者.这个方法在添加到新的父视图之前会先从旧父视图上移除.

初始化只是创建对象,并无指针,addSubView后由于强引用才有了指针,有了指针block才能生效。(仅仅是猜测)

后来博主发现多次调用会触发这个block,即使没有addSubView,把上面的代码放在一个按钮点击的事件中:



第一次点击后
这里写图片描述
看到UIImage无指针存在,所以未触发block,



第二次点击后
这里写图片描述

最后可以确定,没调用block是因为没有指针,但是这里两次创建后莫名有了指针,仔细看了下第一次点击的调试信息:
这里写图片描述

第一次调用imageView有指针,但是UIImage无指针,第二次调用,两者都有了指针,所以才触发了block,但是个中原因没太懂,有感兴趣的可以来解释下,欢迎加群,一起学习。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodingFire

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值