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 ...
随机推荐
- ECMAScript5提供了9个新数组方法:遍历、映射、过滤、检测、简化、和搜索数组
大多数方法的第一个参数接收一个函数,并且对数组的每个元素调用一次该函数.如果是稀疏数组,对不存在的元素不调用传递的函数.在大多数情况下,调用提供的函数使用三个参数:数组元素,元素的索引,数组本身,通常 ...
- vue2.0中v-on绑定自定义事件的理解
vue中父组件通过prop传递数据给子组件,而想要将子组件的数据传递给父组件,则可以通过自定义事件的绑定. 每个Vue实例都实现了[事件接口],即: 1.使用 $on(eventName) 监听事件 ...
- Strapi 安装易错位置
Strapi官网(https://strapi.io)介绍:最先进的开源内容管理框架,可以毫不费力地构建功能强大的API,建立在Node.js平台之上,为您的API提供高速惊人的表现. 简单点说,(对 ...
- KMP算法的一个简单实现
今天学习KMP算法,参考网上内容,实现算法,摘录网页内容并记录自己的实现如下: 原文出处: http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93M ...
- 06_javassist
[简述] Javassist是一个开源的java字节码操作工具,主要是对已经编译好class文件进行修改和处理,可以直接检查.修改.创建 java类. [javassist实例] package co ...
- 【2014-08-23】Beyong Coding
be a product engineer,not be a engineer 选择比努力更重要 just code it,code it ,until you make it 缺的不是i ...
- [翻译] 单例(Singleton)
英文原文: https://sourcemaking.com/design_patterns/singleton 意图 确保一个类只有一个实例,并提供一个访问其实例的全局点: 封装 “即时初始化” ( ...
- Java—maven项目管理
Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建.报告和文档的软件项目管理工具. Maven环境搭建 http://maven.apache.org/download.c ...
- 深入理解mysql的底层实现
MySQL 的常用引擎 1. InnoDB InnoDB 的存储文件有两个,后缀名分别是 .frm 和 .idb,其中 .frm 是表的定义文件,而 idb 是数据文件. InnoDB 中存在表锁和行 ...
- C/C++内存泄露检测
以下测试基于的gcc版本: gcc (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4Copyright (C) 2013 Free Software Foundation, In ...