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 ...
随机推荐
- 2D平面中关于矩阵(Matrix)跟图形变换的讲解
在二维平面上,常用的有以下三种基本的图形变化: 1)Translation 2)Scale 3)Rotation 在canvas的开发中,我们也经常会用到这样的一些图形变换,尤其是我们在写自定义Vie ...
- 在IIS中浏览网站时出现:无法打开登录所请求的数据库 "***",登录失败
在IIS中发布Web应用程序后,浏览网站时出现无法打开登录所请求的数据库 "***",登录失败错误,如下图所示: 解决办法:打开系统Web.Config配置文件,查看数据库连接串是 ...
- ANN神经网络——实现异或XOR (Python实现)
一.Introduction Perceptron can represent AND,OR,NOT 用初中的线性规划问题理解 异或的里程碑意义 想学的通透,先学历史! 据说在人工神经网络(artif ...
- 什么是延展性(Malleability,可鍛性)
原文:http://8btc.com/forum.php?mod=viewthread&tid=23878&page=1#pid270878 1. 什么是延展性(Malleabilit ...
- android之键盘转载
显示键盘: EditText editText.setFocusable(true); editText.setFocusableInTouchMode(true); editText.request ...
- SQL Server ->> T-SQL查询面试题之实例版
1 - 3 题: 数据表结构: OrderID ProductID OrderDate SaleAmount 1 1 2015-01-01 100 2 6 2015-02-01 900 3 1 ...
- linux(centos)设置tomcat开机启动
方法一: linux 下tomcat开机自启动修改Tomcat/bin/startup.sh 为: export JAVA_HOME=/usr/java/j2sdk1.4.2_08 export CL ...
- 安装和测试Kafka
本文主要介绍如何在单节点上安装 Kafka 并测试 broker.producer 和 consumer 功能. 下载 进入下载页面:http://kafka.apache.org/downloads ...
- [EffectiveC++]item33:避免遮掩继承而来的名称。
先看看: ZT C++ 重载.覆盖和隐藏的区别 http://www.cnblogs.com/jeanschen/p/3405987.html 隐藏是指派生类的函数屏蔽了与其同名的基类函数,规则如下: ...
- OC基础数据类型-NSString
1.字符串的初始化 //字符串的初始化 NSString *str = @"Hello world!"; NSString *str2 = [[NSString alloc] in ...