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

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. [C语言(VC)] 打造自己的键盘记录器 (zaroty)

    说起键盘记录,想必很多朋友都用过网上流传的一些键盘记录软件吧,但是有没有想过自己写一个呢?也许你会想:会不会很复杂啊?我可以很负责的告诉你,写键盘记录是很简单的.你所需要的仅仅是懂得一些C语言的DLL ...

  2. Asp.net中使用资源文件实现网站多语言

    首先需要新建一个ASP.NET Web Application.然后右键项目文件Add->Add ASP.NET Folder->App-GlobalResources. 新建好资源文件夹 ...

  3. Lotus分析

    一 Lotus的任务 Lotus是一个消息通知服务,topic和subscription是多对多的关系.后面我加了一个发送自定义邮件和自定义短信的功能. 产品里面有个监控报警和通知列表.监控报警里创建 ...

  4. 【转】来自《轻松scrum之旅》的敏捷开发总结

    敏捷开发的核心价值观是,软件开发最重要的是给用户提供有价值的.可以工作的软件.如何保证提供有价值的软件,是通过反馈机制来完成的.这一点,我们体会很深.自从采用敏捷开发以后,我们比以前更有意识地希望得到 ...

  5. Windows Phone开发-开发环境和结构

    Windows Phone 7.1的开发工具发布了,一直对WP7很关注,现在终于可以开始学习了.其实09年就学习过silverlight,看过3的SDK文档,当时因为工作,断断续续也没有坚持下来,所以 ...

  6. 几种sap增强的查找方法

    ***方法一**************************************** 通过SE30,运行TCODE后,点Evaluate后,查看运行时间分析评估:命中清单. 找以“exit”开 ...

  7. iOS之SDWebImage的使用

    第一步,下载SDWebImage,导入工程.github托管地址https://github.com/rs/SDWebImage 第二步,在需要的地方导入头文件 1 #import "UII ...

  8. APP运营干货分享

    从移动互联网市场总监岗位出发,从几个方面来阐述移动互联网部门如何制定一份运营推广策划案,至于关于移动互联网,移动电商是大趋势这些虚的.空泛的文字,不展开说了. 一.竞品分析 1.选择竞品,做好定位(选 ...

  9. 解析搜狗词库(python)

    #!/usr/bin/python # -*- coding: utf-8 -*- import struct import sys import binascii import pdb #搜狗的sc ...

  10. js数组求和

    array1.reduce(callbackfn[, initialValue]) callback : 函数执行在数组中每个值 initialValue : 对象作为第一个参数回调的第一次调用使用 ...