构造方法
我们创建一个对象的时候一般喜欢直接调用一个类方法,比如有一个Person类,我们为这个Person类创建对象一般是直接这样[Person new];其实new是NSObject中的一个类方法,这个new方法中是先调用了alloc方法,alloc方法也是一个类方法,作用是创建这个类的对象,再将这个对象的指针返回;再调用创建的对象的对象方法init,作用是初始化创建的对象的属性,然后返回这个已经被初始化的对象。
比如: Person *p1 = [Person new];
完全等价于:
Person *p1 = [[Person alloc] init];
init方法叫做构造方法,它是定义于NSObject类中的一个对象方法,这个方法主要就是初始化所有的属性,基本类型属性初始化为0,非OC类型属性初始化为NULL,OC类型属性初始化为nil。因此,在默认情况下,我们创建一个对象,初始化完毕后,这个对象的属性都是有默认值的。
但是,如果我们想创建一个对象时对象的属性的默认值不是0、NULL、nil的时候,我们应该重写构造方法
关键词:
写到这里心慌慌的,压力骤然而起,
1.什么是构造方法?
OC构造方法
2.什么是重写构造方法?为什么要重写构造方法?
重写构造方法就是为了让属性初始化的时候按照我们自己的意愿,初始化一个值
格式是:
// 重写init方法 - (instancetype)init { // 先初始化父类的对象 self = [super init] if(self != nil) { // 初始化本类成员变量 -age = 10; } // 返回一个已经初始化好的对象 return self; }
那么重点来了,相信不止我一个人对为什么要加一条:self = [super init]产生疑问,
在经过我多次代码尝试和查阅资料得出自己的理解:
普遍疑问:[super init]显然是对父类的初始化,那么为什么要对父类初始化?我只对子类初始化不就够了,管你父类干嘛?
父类可能在初始化中释放了当前的对象并创建了新的内存区域。
这时,子类需要将self指向新的内存区域才能正常工作。所以一定要执行self = [super init];
内存方面可能欠缺:以后学习了相关知识后可以参考一下文档:
http://blog.csdn.net/wihing/article/details/7316041
3.什么是自定义构造方法?怎么理解自定义构造方法的用处?
http://www.jianshu.com/p/a7cd668710da
oc基础复习之类方法和对象方法的理解
面向对象的难易点:其实也就是封装:要会调封装,也要会自己封装,封装就是给出一些接口,让我们去用,我们不关心其实现,但往往学的时候不踏实说他容易是用着容易,只要有接口,就可以完成很多我们想要的功能,但往往分不清功能... 查看详情
ui基础之通知的小结
1.需要掌握:?通知的发布 ?通知的监听 ?通知的移除通知中心(NSNotificationCenter)小结:其实很简单:通知流程就是:一个发布通知的对象把通知发布给通知中心,通知中心负责把通知传递给通知的接收者. 插曲:一直以... 查看详情
android--面试复习指南之java基础(代码片段)
Java基础中考察频率比较高的是Object、String、面向对象、集合、泛型和反射。一、抽象类与接口的区别?抽象类可以提供成员方法的实现细节,而接口中只能存在public抽象方法;抽象类中的成员变量可以是各种类型的... 查看详情
java面试复习基础
*基于javaGuidejava基础重载(override)要求子类的返回值小于父类(类型相同),修饰符使用范围也大于分类,抛出异常小于父类。静态方法不能调用类非静态方法,因为静态方法可以在不生成对象的时候直接调用。默认构造方法,因... 查看详情
oo复习--基础知识回顾(变量,控制符)(代码片段)
构造方法构造方法的方法名必须与类名一样。构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类型。 Java中局部变量、实例变量、类变量(静态变量)publicclassVariablestaticintallClicks=0;//类变量Stringstr="hellowor... 查看详情
阿花宝宝java基础笔记之构造方法
构造方法语法:public类名(){}1.实例化对象时,调用类的默认的隐藏的无参的构造方法。2.如果有自定义的构造方法,则不调用默认的类的无参的构造方法。 类名对象名=new类名();//这是调用了的类的无参的构造方法 ... 查看详情
java基础|io流之使用file类的正确姿势
为跳槽面试做准备,今天开始进入Java基础的复习。希望基础不好的同学看完这篇文章,能掌握泛型,而基础好的同学权当复习,希望看完这篇文章能够起一点你的青涩记忆。一、什么是File类?java.io.File类是文件和目录路径名的... 查看详情
java复习基础篇——代码执行顺序
代码块:在Java中,使用{}括起来的代码成为代码块 根据其位置和声明的不同,可以分为局部代码块:局部位置,用于限定变量的生命周期构造代码块:在类中的成员位置,用{}括起来的代码。每次调用构造方法执行前,都会... 查看详情
java面向对象基础复习
this关键字用法: 表示当前对象的引用,即调用成员属性和方法时,表示当前正在调用的对象 调用其他构造方法(必须放在第一行);super关键字 指向自己(直接)父类对象的一个指针,可以调用父类的成员属性和方... 查看详情
一脚踩进java之基础篇16——面向对象(构造方法)
一、什么是构造方法呢?从字面上理解即为构建创造时用的方法,即就是对象创建时要执行的方法。既然是对象创建时要执行的方法,那么只要在new对象时,知道其执行的构造方法是什么,就可以在执行这个方法的时候给对象进... 查看详情
java基础—面向对象之构造方法
一、构造方法的介绍 开发过程中经常需要在创建对象的同时明确对象的属性,比如员工刚入职公司就要明确他的姓名、年龄等属性信息。 那么在创建对象就要明确属性值,如何实现呢?也就是在创建对象的时候就要做的... 查看详情
本周学习小结
...类成员的访问权限在派生类的变化。这一点有点难,要多复习体会。在定义派生类构造函数时,需要调用基类的构造函数,初始化基类成员。注意基类构造函数和析构函数的调用函数,写出运行结果。学习了二义性和支配规则、... 查看详情
22-oc构造方法基本概念
构造方法 在OC中init开头的方法, 我们称之为构造方法 构造方法的用途构造方法的用途: 用于初始化一个对象, 让某个对象一创建出来就拥有某些属性和值 如何实现构造方法重写init方法, 在init方法中初始... 查看详情
,继承(代码片段)
目录Objective-C基础教程第四章,继承继承的语法格式继承的工作机制方法调度实例变量self重写方法小结Objective-C基础教程第四章,继承//------------------------------------------------------------------------------//OC面向对象继承代码演示,矩形圆形... 查看详情
java基础面向对象之构造方法和关键字
构造方法 构造方法简介 在开发中经常需要在创建对象的同时明确对象的属性值,比如员工入职公司就要明确他的姓名、年龄等属性信息。 那么,创建对象就要明确属性值,那怎么解决呢?也就是在创建对象的时候就... 查看详情
李洪强ios开发之oc语言基础知识
OC语言基础知识一、面向对象OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能的类。术语... 查看详情
java基础知识复习(代码片段)
文章目录复习1.Java编译和运行2.Java运行环境3.Java注释4.Java中的打印5.数据类型整形浮点型字符类型字节类型布尔类型数据类型转换强制类型转换隐式类型转换小结6.变量命名规范7.运算符算数运算符逻辑运算符移位运算符关系运算... 查看详情
申论(基础篇)之基础常识复习建议
一、历史常识复习建议(1~3题) 以历史人物为中心学习相关的历史事实、常识。 二、地理知识复习建议(1~3题) 1、自转和公转 2、中国三级阶梯 3、五种基本地形 4、地貌 三、历史... 查看详情