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

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 vwwareTools 拷贝文件设置

    1. 在root 用户下面 在虚拟机菜单上面选择  Vwware Tools   虚拟机会将 安装文件  拷贝到桌面上面 拷贝这个文件 到 root 文件夹 /home/root 将XXX.tar.g ...

  2. xcode6 升级到xcode7 产生的问题

    当初作为第一个吃螃蟹的人,第一天就把xcode升级到了xcode7,结果报了一堆错,网上也没有解决方案,于是果断退到xcode6.这两天看时机成熟,升到了xcode7,在升级后,会有许多问题,在此罗列 ...

  3. iOS之FMDB 转载

      写的较好的博客:http://blog.csdn.net/xyz_lmn/article/details/9312837 http://www.cnblogs.com/wuhenke/archiv ...

  4. POJ 2003 Hire and Fire (Tree)

    题目:Hire and Fire 题目翻译成数据结构就是:建树,加结点,删除结点,打印结点.只有删除结点稍微复杂点,因为删除设计掉树的调整. 首先要考虑树怎么存储才能使解题更顺手. 1.我们要存储每个 ...

  5. Python 调用C++

    1.C++代码提供Python需要的接口: #include "stdafx.h" #include <boost/python.hpp> #include <s ...

  6. ThinkPHP CURD方法盘点:page方法

    page方法也是模型的连贯操作方法之一,是完全为分页查询而诞生的一个人性化操作方法. 用法 我们在前面已经了解了关于limit方法用于分页查询的情况,而page方法则是更人性化的进行分页查询的方法,例 ...

  7. Codeforces Round #324 (Div. 2) B. Kolya and Tanya 快速幂

    B. Kolya and Tanya Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/584/pro ...

  8. Android的横竖屏切换

    android的横竖屏切换,也会发生不少问题. 1. 锁定屏幕方向,禁止切换: 在AndroidManifest.xml中的Activity参数中加上   android:screenOrientat ...

  9. tomcat的几种部署方法

    原文:http://blog.163.com/pg_roger/blog/static/185884389201172921211937/ 1.将应用文件夹或war文件(均指编译好的文件)塞到tomc ...

  10. pomelo组件..

    1.pomelo会加载lib/components目录下的组件.并设置为属性..和存储在Pomelo.components中..注意这里其实存储的是对象的构造函数.. function load() ...