构造方法:用于在对象创建出来的时候为对象的成员变量或者属性赋值

1.构造方法就是初始化对象的方法,它属于对象方法。构造方法分为系统自带和自定义构造方法。

 如何创建自定义构造方法:

  • 属于对象方法那么以 - 号开头
  • 返回值一般为id类型
  • 方法名一般以init开头

2.实现方式

(1)如果是系统自带的构造方法,需要重写父类中自带的构造方法 比如init

(2)如果是自定义构造方法,需要自己去实现 init:

注意:无论是哪种形式的构造方法,在实现构造方法的时候都需要先调用父类的构造方法 。构造方法在执行的时候先调用父类的方法,再执行子类的方法,如果      有多个继承会一层一层的向上找父类方法,将父类方法执行完后再一层层的执行子类的构造方法

/*********************** Person.h文件 **************************************/
#import <Foundation/Foundation.h> @interface Person : NSObject // @property 默认生成的成员变量为@private类型子类无法直接访问 可以通过get/set方法访问 // 年龄
@property int age;

// 姓名
@property NSString *name;

// 自定义构造方法 在初始化的时候为属性"年龄"和"姓名"赋值
- (id)initWithAge:(int)age andName:(NSString *)name; @end
/*********************** Person.m文件 **************************************/
#import "Person.h"
@implementation Person // 重写父类的init方法 父类init方法返回的是id类型就是为了让任何子类的对象调用
- (id)init
{
// 1.首先初始化父类NSObject中声明的一些成员变量和属性 然后将初始化的对象赋值给当前对象
self = [super init]; // 2.如果父类的初始化成功 再初始化子类对象
if (self!= nil) { // self是个指针 如果为空意味着指向0 也可以这样写 self != 0
_age = ;
}
// 3.返回已经初始化完毕的对象
return self;
} // 实现自定义构造函数 在初始化的时候为属性赋值
- (id)initWithAge:(int)age andName:(NSString *)name
{
if (self = [super init]) {
_age = age;
_name = name;
}
return self;
}
@end
/*********************** Student.h文件 **************************************/
#import <Foundation/Foundation.h>
#import "Person.h" @interface Student : Person // 学号
@property int stuNo; // 姓名
@property NSString *name; // 自定义构造方法为子类Student的属性stuNo、age、name赋值
- (id)initWithName:(NSString *)name andAge:(int)age andStuNo:(int)stuNo; @end
/*********************** Student.m文件 **************************************/
#import "Student.h" @implementation Student // 将学生的学号默认为1 重写父类的构造方法
- (id)init
{
if (self = [super init]) {
_stuNo = ;
}
return self;
} // 实现自定义的构造方法 初始化子类中所有的属性 name属性和age属性继承自父类Person类
- (id)initWithName:(NSString *)name andAge:(int)age andStuNo:(int)stuNo
{
// 直接调用父类Person的构造方法 将age和name直接交给父类 让父类去初始化
if (self = [super initWithAge:age andName:name]) { // 体会这种思想
_stuNo = stuNo;
}
return self;
} /**
* 在初始化的时候在子类中将子类对象的属性以及继承父类中的所有的属性都初始化了 不建议这么写
*
- (id)initWithName:(NSString *)name andAge:(int)age andStuNo:(int)stuNo
{
// 调用NSObject中的方法
if (self = [super init]) {
self.age = age; // [self setAge:age] 子类通过get/set调用父类的属性
self.name = name;
_stuNo = stuNo;
} return self;
}
*/
@end
/*********************** main.m文件 **************************************/
#import <Foundation/Foundation.h>
#import "Person.h"
#import "Student.h" int main(int argc, const char * argv[])
{
Person *person = [Person new];
NSLog(@"%d",person.age); // 执行完init方法后,任何成员变量都默认为0
Person *p = [[Person alloc] init];
NSLog(@"%d",p.age); Person *p1 = [[Person alloc] initWithAge: andName:@"Rose"]; Student *stu = [[Student alloc] initWithName:@"Jack" andAge: andStuNo:]; return ;
}

iOS 构造方法的更多相关文章

  1. 构造方法概念,自定义构造(init)方法的用途, 类工厂方法(就是直接用类名 类调用)

    一. 构造方法 构造方法:在OC中init开头的方法, 我们称之为构造方法 构造方法的用途: 用于初始化一个对象, 让某个对象一创建出来就拥有某些属性和值 // 比如我们定义一个Person的类,然后 ...

  2. iOS开发——UI基础-自定义构造方法,layoutSubviews,Xib文件,利用Xib自定义View

    一.自定义构造方法 有时候需要快速创建对象,可以自定义构造方法 + (instancetype)shopView { return [[self alloc] init]; } - (instance ...

  3. ios swfit 由继承UIButton了解类的构造方法

    最近需要建立UIButton的子类. 先看一看swfit中继承父类构造方法的条件: Rule1 1“If your subclass doesn’t define any designated ini ...

  4. 李洪强iOS开发之OC语言构造方法

    OC语言构造方法 一.构造方法 (一)构造方法的调用 完整的创建一个可用的对象:Person *p=[Person new]; New方法的内部会分别调用两个方法来完成2件事情,1)使用alloc方法 ...

  5. ios 中的构造方法(二)

    在之前有简单介绍了构造方法的结构,以及构造方法的作用,那么我们现在来讨论一下: 对象的创建分为两步:+ alloc 分配内存空间和 -init 进行初始化 那么在继承自 NSObject 的类当中,我 ...

  6. ios 中的构造方法

    构造方法 1.什么是构造方法? 初始化对象的方法. 默认情况下,在 OC 当中创建1个对象分为两部分(new 做的事): +alloc:分配内存空间 -init :初始化对象 2.构造方法的作用是? ...

  7. 【iOS】Swift类的继承、构造方法、析构器等复习

    一.继承与重写, 防止重写 1.1 基类, 不继承任何类. Swift不想OC或者Java中继承自Object类.定义一个类,不继承任何类,该类就是基类. [java] view plaincopy ...

  8. iOS 小知识点(持续更新)

    1.如何通过代码设置Button  title的字体大小 设置Button.titleLabel.font = [UIFont systemFontOfSize:<#(CGFloat)#> ...

  9. iOS开发系列--Swift进阶

    概述 上一篇文章<iOS开发系列--Swift语言>中对Swift的语法特点以及它和C.ObjC等其他语言的用法区别进行了介绍.当然,这只是Swift的入门基础,但是仅仅了解这些对于使用S ...

随机推荐

  1. centos 卸载自带的 java

    一般情况下,我们都要将linux自带的OPENJDK卸载掉,然后安装SUN的JDK 首先:查看Linux自带的JDK是否已安装     <1># java -version        ...

  2. C#通过OLEDB导出大数据到Excel

    C#导出数据到Excel,基本有两种方法,一种方法是通过Microsoft.Office.Interop.Excel.Application,一行一列的写入Excel中:另一种方法是通过OLEDB,利 ...

  3. UITextView光标在中间的问题

    if ([self respondsToSelector:@selector(setAutomaticallyAdjustsScrollViewInsets:)]) { self.automatica ...

  4. Apache Options Indexes FollowSymLinks具体解释

     禁止显示Apache文件夹列表-Indexes FollowSymLinks 怎样改动文件夹的配置以禁止显示 Apache 文件夹列表. 缺省情况下假设你在浏览器输入地址: http://loc ...

  5. SqlServer按照指定顺序对字段进行排序

    最近的一个项目,使用存储过程对报表进行分析,其中有一些名称需要根据指定顺序显示,而其名称对应的编号并不是按照要求的顺序排列的.通过上网查找资料,发现sql 中的charindex函数可以帮助解决这个问 ...

  6. Funambol Developer&#39;s Guide 中 connector development样例的问题

    今天学习Funambol的connector开发,官方文档中的样例有问题. 首先,文档中提供的maven命令不可用: mvn archetype:generate -DarchetypeGroupId ...

  7. 用C++程序理解汉字的机内码表示

    汉字的编码是非常多刚開始学习的人不easy搞不明确的事情.最早的汉字字符集是GB2312-80,收入汉字6763个,符号715个,总计7478个字符,大陆普遍使用的简体字字符集.本文借助于一个能输出这 ...

  8. Android手机上判断网络运营商

    我们想获取手机的运营商信息.通常都会去调用系统的TelephonyManager类的取数据.但是很多时候可能取不到卡的信息(例如双卡手机和 一些特殊卡),这样就区别不了运营商了.但是有时候我们的需求要 ...

  9. android学习日记20--连接组件之Intent和IntentFilter

    上次刚了解完Android的四大组件,现在学习组件间通信的Intent和IntentFilter 一.Intent 1.简述 Intent(意图)在应用程序运行时连接两个不同组件,是一种运行时的绑定机 ...

  10. Java基础 Day14 泛型

    //为什么要使用泛型 //1.解决元素存储的安全性的问题 //2.解决获取元素时,须要类型转换的问题 //未使用泛型 package org.tizen.test; import java.util. ...