ios 中的构造方法(二)
2024-08-31 02:31:58
在之前有简单介绍了构造方法的结构,以及构造方法的作用,那么我们现在来讨论一下:
对象的创建分为两步:+ alloc 分配内存空间和 -init 进行初始化
那么在继承自 NSObject 的类当中,我们无论怎么测试,对象不调用 init 方法,仍旧是可以进行初始化的.同时,无论怎么使用,是没有任务问题的,那么,为什么还强调,必须要调用初始化方法呢??
由于继承自 NSObject 的类,测试不出来结果,下面我采取 UI 控件的测试方法:
示例:创建了两个 view, 一个初始化,一个未初始化,对比看结果:
对比结果可以看出:未初始化的view 对象,layer 是没有分配内存地址的,也就是并没有创建 layer.
我们可以假设:因为一个 view 能够显示出来,是因为内部有一个 layer, 那么我们可以设想, layer 是 view 的一部分,所以,如果 layer 没有创建,那么 view 就不会被完整的创建出来,我们在使用未经过初始化的 view 时,添加到父控件时,就会报错,而且报的是对象提前释放的错误.
相对于 NSObject 类与 UI 控件类来说, UI控件类的复杂性非常非常高,需要初始化父类的层级也非常高,如一个 view 之所以成为一个 view, 我们可以默认它必须具备某些属性,而这些属性必须初始化为某些值,如果在使用该控件时,没有进行初始化,那么,系统可以默认该控件并没有被完整的创建,所以在使用过程中,会报错.
最新文章
- HTML 的 meta 标签
- 自学C++第一天
- JMS与MQ详解(有项目)
- 智能车学习(二十一)——浅谈CCD交叉以及横线摆放
- [转]ASP.NET MVC Json()处理大数据异常解决方法 json maxjsonlength
- Python socket进阶 多线程/进程
- android studio adb
- STL Container和ATL智能包裹类的冲突
- Codeforces Round #291 (Div. 2) C - Watto and Mechanism 字符串
- M_LROOT,LD_LIBRARY_PATH, “Not all extension Dlls were loaded”问题原因及解决方法(持续更新)
- VB高清图标制作方法
- OpenCV学习(20) grabcut分割算法
- 分享两个网址,一个是使用mssql自带的跟踪工具和分析工具
- 栈的实现Java
- span是没有value标签的,要向获得标签内部的值改怎么办。
- Delphi关于ADO控件的简单使用
- DevExpress控件库 开发使用经验总结1 DevExpress简介、安装、使用
- 【运维】Dell R710如何开启VT服务
- Youtube-dl 配置 使用方法 + 配合aria2 多线程 下载 + 配合 ffmpeg 自动合并分段视频
- PHP filter 函数FILTER_CALLBACK 过滤数据