removeFromSuperview 理解

iOS objectView.removeFromSuperview之后if(self.objectView)仍然成立?

  // 移除当前自定义视图
    for(UIView *myView in [self.view subviews])
    {
        if ([myView isEqual:self.unfinishedView]) {
            [myView removeFromSuperview];
        }
    }

很多人可能碰到和我一样的疑惑,我明明把某个 unfinishedView 直接removeFromSuperview了,为什么我下面判断if(objectView){}这个分支仍然能进去呢?我不是已经删除了吗?

官方文档这样描述它

Unlinks the receiver from its superview and its window, and removes it from the responder chain. If the view’s superview is not nil, the superview releases the view.

意思 大题是 :把当前view从它的父view和窗口中移除,并且也把它从响应事件的响应链中移除。如果这个视图不为nil,父视图会释放这个视图。

个人理解是 其生命周期和父试图一样,如果你自定义的视图是 strong 修饰 则引用计数为2,则不会被释放,如何再次执行 addSubview 就又出现了。

如果 是用weak修饰 则引用计数为1 ,可以被释放。

那当我们使用自定义的UIView时用weak还是strong呢?

我个人觉得应该用 strong,因为用 weak 并没有什么特别的优势,并且 weak 变量会有额外的系统维护开销的,如果你没有使用它的特别的理由,那么用 strong 的话应该更好。

如果你要做 Lazy 加载,那么你也只能选择用 strong。

注意,如果你非要用 weak,其实也没什么问题,只需要注意在赋值前,先把这个对象用 addSubView 加到父 view 上,否则可能刚刚创建完,它就被释放了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值