OC中自定义init方法
---恢复内容开始---
我们知道,在函数中实例化一个对象,大多数会同时进行初始化,如 Person *p =[ [Person alloc]init];
此时已经进行了初始化,使用init方法,那么我们能不能重写init方法呢,让它可以在初始化的时候直接赋值,可以从内部赋值也可以从外部赋值。我们先把代码写出来然后进行分析:
-(id)init
{
if (self = [super init]) {
self.age = 30;
}
return self;
}
在这块代码中,除去self.age = 30;该结构是构造方法的固定模式。在这里我们不得不提及 self,self可以用来调用方法,类方法和实例方法都可以用self调用,那么self是什么?我们不需要知道self是什么,因为self时刻在变,一句话,当前的方法是谁在调用,self就是谁。self类似于C++和Java中的this,大家可以参照理解。我们来实例化一个对象,P在此处的代码中,self指的是 p ,因为age是p的属性。这块代码,-(id),指的是任何类型,假设我们不知道返回值self是什么类型,我们也不必担心,因为-(id)可以指代任何类型。if(self = [super init]),括号内是对self进行初始化,括号外是if,意思是初始化成功才向后执行,失败则直接返回,系统回收已分配的资源。几乎没有初始化失败的情况,但我们为了避免失败,还是要进行判断。在随后对年龄进行赋值,年龄为30,在这个方法中,我们是从内部对年龄进行初始化,直接在.m文件中直接实现,不需要在.h文件中先声明。在主函数实例化对对象的时候,对象的年龄就是30,而不需要另外赋值。这是内部初始化,还有外部初始化。外部初始化需要在.h文件中声明,然后在.m文件中实现。我们来看具体代码:
//声明
-(id)initWithName:(NSString *)aNme andAge:(NSInteger)aAge;
//实现
-(id)initWithName:(NSString *)aNme andAge:(NSInteger)aAge{
self.name = aName;
self.age = aAge;
}
我们在主函数中进行实例化对象的时候,选择我们自定义的方法,由我们手动控制需要初始化的值从而完成初始化,这就是外部赋值。本人是初学者,大家有问题都可以进行评论我们共同解决。感谢阅读。
---恢复内容结束---
OC中自定义init方法的更多相关文章
- Swift基础--Swift中的分类以及在分类中扩展init方法的注意事项
Swift中的分类 1.创建一个空的swift文件 2.关键字extension,格式: extension 要扩展的类名 {} extension UIButton { } Swift中扩展init ...
- IOS开发中重写init方法使用需谨慎
IOS开发中重写init方法使用需谨慎 今天在写一个小软件的时候出现一点问题,这个软件的功能是搜索全国学校,首页就是搜索输入框,在框中输入完要查询的学校所在省份,点击buttom后就会跳转到对应的视图 ...
- Swift中的init方法
摘要:Swift有着超级严格的初始化方法,不仅强化了designated初始化方法的地位,所有不加修饰的init方法都需要在方法中确保非Optional的实例变量被赋值初始化,而在子类中,也强制调用s ...
- OC中属性及方法
1.声明式属性 a.实例变量 b.声明属性 自动生成setter/getter方法 .h ->@property 属性类型 属性名; .m ...
- OC中自定义构造方法
格式 -(instancetype)init(){ self=[super init] if(self){ } return self; } 自定义构造方法规范 1)一定是对象方法,以减号开头 2)返 ...
- 网络与多线程---OC中多线程使用方法(一)
小编在此之前,通过一个小例子,简单的形容了一下进程与线程之间的关系,现在网络编程中的多线程说一下!!! *进程的基本概念 每一个进程都是一个应用程序,都有自己独立的内存空间,一般来说一个应用程序存在一 ...
- OC中的私有方法
1.不写在.h文件中 2.不写在.m文件中 一.私有方法: 没有在.h文件当中进行声明的方法在OC中都被称为私有方法 私有方法子类是无法继承到的
- Unity中自定义扩展方法
问题背景 在使用unity开发过程中,通常会遇到一种情况,比如说给物体重新赋值坐标的问题, Transfrom tran: ,pos_y=,pos_z=; tran.position=new Vect ...
- Swift中自定义打印方法
// 1.获取打印所在的文件 let file = ( #file as NSString).lastPathComponent // 2.获取打印所在的方法 let funcName = #func ...
随机推荐
- 软件项目技术点(9)——如何将gif动态图拆分绘制
AxeSlide软件项目梳理 canvas绘图系列知识点整理 背景介绍 我们的软件支持插入gif图片,并且展示在软件里是动态的,例如插入下面这张gif图. 在软件里显示的同样是这样的动态效果: 那 ...
- gulpfile配置
/** * 只包含合并压缩混淆,监听服务 */// 引入gulp模块var gulp = require('gulp'); // 引入其他模块var less = require('gulp-less ...
- CentOS/ubuntu/Solaris软件包安装
一.CentOS/Red Hat yum = Yellow dog Updater, Modified (1)yum配置文件 (在CentOS下,默认安装yum,无须配置即可使用) ...
- Logger性能优化
最近排查线上问题,无意中发现了Logger堵塞的情况,排查的同时也做下总结,做个笔记,以防备用. 先上图,看下实际堵塞的情况 从图中可以清楚的看到标黄的都在 waiting to lock <0 ...
- 基于SignalR的站点有连接数限制问题及解决方案
最近在做一个Web项目,由于需要实现客户端和服务器的双向通信,所以就用到了SignalR2.0:站点的运行环境是Win7服务器,IIS7,但遇到了一个问题,就是当客户端连接数到达10个以后,后面的用户 ...
- ogr2ogr使用
简介 org2ogr是OGR模块中提供的一个重要工具,用于对数据源进行格式转换 使用方式 命令行参数 [xingxing.dxx@30_28_6_20 J50F001020]$ ogr2ogr --l ...
- jq重复切换类名
//重复切换类名"active"$(".probability-rules header").toggleClass("active");
- HTML 段落p
可以把 HTML 文档分割为若干段落. HTML 段落 段落是通过 <p> 标签定义的. 实例 <p>This is a paragraph</p> <p&g ...
- sqlserver函数教程
sqlserver聚合函数教程: mssql sqlserver avg聚合函数使用简介mssql sqlserver CHECKSUM_AGG聚合函数使用简介mssql sqlserver coun ...
- JAVA程序员常用开发工具
1.JDK (Java Development Kit)Java开发工具集 SUN的Java不仅提了一个丰富的语言和运行环境,而且还提了一个免费的Java开发工具集(JDK).开发人员和最终用户可以利 ...