首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >iOS objectView.removeFromSuperview之后if(self.objectView)仍然成立?

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

作者头像
Raindew
发布于 2018-06-14 06:24:55
发布于 2018-06-14 06:24:55
1.4K00
代码可运行
举报
运行总次数:0
代码可运行
额,标题很长,但不得不这样写。

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

实际上,你可能和我一样,没有理解这个removeFromSuperview到底是什么意思,先来说说这个属性的意思:

官方文档这样描述它

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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,父视图会释放这个视图。

上面说了,父视图会释放这个视图,但是我们实际测试却没有,那么我们猜测可能是因为属性的强引用导致其根本没有释放。果然,查了下资料,有人这样说:

如果没有其他地方再对视图进行强引用,则会从内存中移除。如果还存在其他强引用,视图只是不在屏幕中显示,并没有将该视图从内存中移除。所以如果需要使用该视图,不需要再次创建,而是直接addSubview就可以了。

由此,就好解决了,直接把强引用的strong修改成weak,局部创建对象,用weak指向该对象即可。这样弱引用就不会影响父视图对目标视图的释放操作,继而判定其对象的是否存在也可行了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.01.10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
addSubView需要注意的几个点为什么要在addsubview:一个view对象后,release它?
addSubview: Adds a view to the end of the receiver’s list of subviews. 译:增加一个视图到接收者的子视图列表中。 - (void)addSubview:(UIView *)view Parameters view The view to be added. This view is retained by the receiver. After being added, this view appears on top of any ot
猿人谷
2018/01/17
1.5K0
【IOS开发基础系列】UIView专题
https://developer.apple.com/library/ios/documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/CreatingViews/CreatingViews.html
江中散人_Jun
2023/10/16
1.3K0
【IOS开发基础系列】UIView专题
iOS中纯代码创建的UI控件使用weak还是strong
iOS开发中,控件的创建一般是两种,一种是通过 Storyboard/xib 创建,一种是通过纯代码创建。通过IB创建的控件,其实试图默认对其有着强引用-->比如IB创建一个UIButton -->形
小蠢驴打代码
2018/05/24
1.6K0
iOS小技能(开发规范): weak和strong修饰符的规范使用
当一个对象不再有strong类型的指针指向它的时候 它会被释放 ,即使还有weak型指针指向它。一旦最后一个strong型指针离去 ,这个对象将被释放,所有剩余的weak型指针都将被清除。
公众号iOS逆向
2022/08/22
1.1K0
iOS小技能(开发规范): weak和strong修饰符的规范使用
UIView - 生命周期
一般情况都是说UIViewController的生命周期,UIView的生命周期经常被忽视。
大壮
2019/02/22
2.9K0
iOS 中的事件响应
iOS 中的事件响应者主要分为两类,分别为UIResponder及UIGestureRecognizer,其中UIControl是一种比较特殊的UIResponder,所以本文将事件响应者分为以下三种类型进行讨论。
CoderStar
2022/08/24
3.5K0
iOS 中的事件响应
iOS工程师必看的 20 道 面试题
本文收录总结了常见的 Swift 和 Objective-C 的面试题,希望对大家有所帮助。
会写bug的程序员
2020/06/09
4.2K0
iOS工程师必看的 20 道 面试题
IOS开发系列——UIView专题之四:事件分发机制篇【整理,部分原创】
iOS中的事件大概分为三种,分别是Milti-Touch Events, Motion Events和Remote Control Events(events for controlling multimedia)。
江中散人_Jun
2022/03/08
8330
IOS开发系列——UIView专题之四:事件分发机制篇【整理,部分原创】
IOS触摸事件分发机制详解
本文主要介绍了iOS事件传递机制,包括Touch Event、Mouse Event和Gesture Event。首先介绍了事件传递的整个流程,然后重点讲解了Touch Event、Mouse Event和Gesture Event的传递流程和区别。最后列举了一些常见应用解决方案,如扩大按钮点击区域、子视图消息传递给父视图等。
MelonTeam
2018/01/04
3.8K4
IOS触摸事件分发机制详解
【IOS开发基础系列】UIViewController专题
        在UIViewController中,view(黑体的view指的是controller的view属性)有两个循环:加载和卸载循环。当程序的一部分向controller请求view的指针且view不在内存中时,view会进入加载循环,controller会将view加载入内存。
江中散人_Jun
2023/10/16
1.3K0
【IOS开发基础系列】UIViewController专题
Objective-C对象引用
引用是iOS内存管理中的重要知识点,总所周知,iOS对象的内存管理是使用引用计数来表示的。一个对象只有在它的所有强引用都被释放后才能被回收。因此,一个对象的生命周期取决于其强引用的所有者。在某些情况下,这种行为可能并不理想。您可能想要引用一个对象而不妨碍对象本身的回收。对于这种情况,您可以获取一个“弱”引用。弱引用是通过存储一个指向对象的指针创建的,而不是保留对象。
Helloted
2022/06/07
1K0
Objective-C对象引用
UI篇-UIResponder之事件传递和响应精析
这篇文章只讨论触摸事件。对于触摸事件UIResponder内部提供了以下方法来处理事件:
進无尽
2018/09/12
2.9K0
UI篇-UIResponder之事件传递和响应精析
2018 - iOS 面试题汇总一般面试题BAT面试题
金三银四,相信最近很多人都在跳槽。那么面试题自然还是要看下的,在这我就把我手里收集到的面试题(朋友面试,网上收集等等)进行了汇总,希望可以帮到正在或者准备面试的你,同时我也可以自己在过一遍一般面试题 1.堆和栈的区别 1.内存管理范围 只有oc对象需要进行内存管理 非oc对象类型比如基本数据类型不需要进行内存管理 2.内存管理本质 因为:Objective-C的对象在内存中是以堆的方式分配空间的,并且堆内存是由你释放的,就是release OC对象存放于堆里面(堆内存要程序员手动回收) 非OC
陈雨尘
2018/06/07
6.6K0
iOS 内存管理相关面试题
保证任何时候指向对象的指针个数和对象的引用计数相同,多一个指针指向这个对象这个对象的引用计数就加1,少一个指针指向这个对象这个对象的引用计数就减1。没有指针指向这个对象对象就被释放了。
iOSSir
2019/06/14
1.7K0
iOS 面试策略之语言工具-Objective-C
Objective-C 是苹果为 iOS 和 Mac 开发量身定制的语言。它随着 iPhone 的出现而大火,直到今天国内外大多数的 App 依然是用 Objective-C 在写。
会写bug的程序员
2021/05/07
8220
iOS 面试策略之语言工具-Objective-C
IOS基础知识第二季
1.分辨率:320*480,640*960 2.icon图标需要两个(57*57) 114*114 用于视网膜屏幕 icon@2x.png,icon.png 3.狂写代码,先写再调试、搜索、自学 4.iphone5设备是4英寸之前是3.5英寸,视网膜技术960*640 iphone4 5.320*480 启动页 640*960 Default@2x.png iphone5 Default-568h@2x.png 6.icon需要有29*29 和 58*58 7.模拟器快捷键: 8.沙盒:IOS
苦咖啡
2018/05/08
1.1K0
iOS面试题----实践向
前言 很多人都说熟悉UIKit,那对于常见的API是否熟悉? 多线程是前端经久不衰的考点。 大家对于Block的weak-strong dance都耳熟能详,是否清楚知道每一个引用背后的持有者,以及对象的具体释放时机? 来试试这4道精挑细选的题目。 正文 题目1、UIImage相关 看下面一段代码, 保存到相册的是什么?(从格式、形状去描述) - (void)testUIImage { UIImage *testImage; UIGraphicsBeginImageContext(C
落影
2018/04/27
8660
iOS面试题----实践向
如何把设计图自动转换为iOS代码? 在线等,挺急的!
本文主要介绍了一种基于Masonry的视图模块化方案,通过使用自定义UIView和UICollectionView实现视图的模块化,简化了视图的创建过程,提高了开发效率。同时,还介绍了一种基于Masonry的自动计算视图间距的方法,简化了间距调整的实现过程。
ios122
2018/01/02
1.7K0
如何把设计图自动转换为iOS代码? 在线等,挺急的!
16道面试官必问你必须会的iOS面试题
一个 UIViewController 中的所有 view 之间的关系其实可以看成一棵树,UIViewController 的 view 变量是这棵树的根节点,其它的 view 都是根节点的直接或间接子节点
会写bug的程序员
2020/05/29
2.9K0
16道面试官必问你必须会的iOS面试题
iOS - 关于NSTimer的循环引用
现象 在当前控制器(ViewController)的view上添加了一个自定义的view(LXFTimerView), LXFTimerView在成功创建出来后添加了定时器NSTimer并加入Run
LinXunFeng
2018/06/29
1.3K0
相关推荐
addSubView需要注意的几个点为什么要在addsubview:一个view对象后,release它?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验