iOS 构造方法
构造方法:用于在对象创建出来的时候为对象的成员变量或者属性赋值
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 构造方法的更多相关文章
- 构造方法概念,自定义构造(init)方法的用途, 类工厂方法(就是直接用类名 类调用)
一. 构造方法 构造方法:在OC中init开头的方法, 我们称之为构造方法 构造方法的用途: 用于初始化一个对象, 让某个对象一创建出来就拥有某些属性和值 // 比如我们定义一个Person的类,然后 ...
- iOS开发——UI基础-自定义构造方法,layoutSubviews,Xib文件,利用Xib自定义View
一.自定义构造方法 有时候需要快速创建对象,可以自定义构造方法 + (instancetype)shopView { return [[self alloc] init]; } - (instance ...
- ios swfit 由继承UIButton了解类的构造方法
最近需要建立UIButton的子类. 先看一看swfit中继承父类构造方法的条件: Rule1 1“If your subclass doesn’t define any designated ini ...
- 李洪强iOS开发之OC语言构造方法
OC语言构造方法 一.构造方法 (一)构造方法的调用 完整的创建一个可用的对象:Person *p=[Person new]; New方法的内部会分别调用两个方法来完成2件事情,1)使用alloc方法 ...
- ios 中的构造方法(二)
在之前有简单介绍了构造方法的结构,以及构造方法的作用,那么我们现在来讨论一下: 对象的创建分为两步:+ alloc 分配内存空间和 -init 进行初始化 那么在继承自 NSObject 的类当中,我 ...
- ios 中的构造方法
构造方法 1.什么是构造方法? 初始化对象的方法. 默认情况下,在 OC 当中创建1个对象分为两部分(new 做的事): +alloc:分配内存空间 -init :初始化对象 2.构造方法的作用是? ...
- 【iOS】Swift类的继承、构造方法、析构器等复习
一.继承与重写, 防止重写 1.1 基类, 不继承任何类. Swift不想OC或者Java中继承自Object类.定义一个类,不继承任何类,该类就是基类. [java] view plaincopy ...
- iOS 小知识点(持续更新)
1.如何通过代码设置Button title的字体大小 设置Button.titleLabel.font = [UIFont systemFontOfSize:<#(CGFloat)#> ...
- iOS开发系列--Swift进阶
概述 上一篇文章<iOS开发系列--Swift语言>中对Swift的语法特点以及它和C.ObjC等其他语言的用法区别进行了介绍.当然,这只是Swift的入门基础,但是仅仅了解这些对于使用S ...
随机推荐
- Redis实战之征服 Redis + Jedis + Spring (三)
一开始以为Spring下操作哈希表,列表,真就是那么土.恍惚间发现“stringRedisTemplate.opsForList()”的强大,抓紧时间恶补下. 通过spring-data-redis完 ...
- 深入C语言可变参数(va_arg,va_list,va_start,va_end,_INTSIZEOF)
一.什么是可变参数 在C语言编程中有时会遇到一些参数个数可变的函数,例如printf(),scanf()函数,其函数原型为: int printf(const char* format,…),int ...
- MFC 学习之 鼠标移动到Toolbar按钮上显示提示信息(tooltip),状态栏也随之改变
1.在ResourceView里加入Toolbar资源,命名IDR_TOOLBAR1 2.在主程序的.h文件中加入变量: CToolBar m_toolbar;CImageList ...
- -join 和 -split 用法
具体可参考 PowerShell_ISE的帮助文件: -Join(一元联接运算符): 一元联接运算符 (-join <string[]>) 的优先级高于逗号.因此,如果向一元联接运算符提交 ...
- Android 编程下 java.lang.NoClassDefFoundError: cn.jpush.android.api.JPushInterface 报错
使用了极光推送的 jar 包项目在从 SVN 中检出后,假设不又一次对 jar 包和 Bulid Path 进行配置就会抛出 java.lang.NoClassDefFoundError: cn.jp ...
- SmoothProgressBar
https://github.com/castorflex/SmoothProgressBar
- python抓取伯乐在线的全部文章,对标题分词后存入mongodb中
依赖包: 1.pymongo 2.jieba # -*- coding: utf-8 -*- """ @author: jiangfuqiang "" ...
- Spring中Bean的生命中期与InitializingBean和DisposableBean接口
Spring提供了一些标志接口,用来改变BeanFactory中的bean的行为.它们包括InitializingBean和DisposableBean.实现这些接口将会导致BeanFactory调用 ...
- Android_AutoCompleteTextView,MultiAutoCompleteTextView
XML布局文件 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:an ...
- bvp4c--语法
bvp4c--语法 1. bvp4c: sol = bvp4c(odefun,bcfun,solinit) sol = bvp4c(odefun,bcfun,solinit,options) so ...