OC核心语法(2)构造函数
来源:互联网 发布:做淘宝店铺用什么软件 编辑:程序博客网 时间:2024/04/18 16:37
一、构造方法概念及举例
用来初始化对象的方法,是个对象方法,- 开头,init 就是构造方法。
例如; Person *p=[Person new];
New方法的内部会分别调用两个方法来完成2件事情,1)使用alloc方法来分配存储空间(返回分配的对象);2)使用init方法来对对象进行初始化。
可以把new方法拆开如下:
1>调用类方法+alloc分配存储空间,返回未经初始化的对象
Person *p1=[person alloc];
2>调用对象方法-init进行初始化,返回对象本身
Person *p2=[p1 init];
3>以上两个过程整合为一句:
Person *p=[[Person alloc] init];
二、重写init方法
重写构造方法的目的:为了让对象创建出来,成员变量就会有一些固定的值
重写构造方法的注意点:
1>先调用父类的构造方法([super init])
2>再进行子类内部成员变量的初始化
代码实例:
1>需求:新建的Person对象年龄为20
#import <Foundation/Foundation.h>// Person类的声明@interface Person : NSObject@property age;@end// Person类的实现@implementation Person// 重写init方法- (id)init{ // 如果对象不为空,即进行初始化成功,那再进行赋值 if(self = [super init]){ _age = 20; } // 返回对象本身 return self;}@endint main(){ Person *p = [[Person alloc] init]; // 新建的对象p的_age属性被初始化为20 NSLog(@"age is %i", p.age); return 0;}
2>需求变更:Student继承Person,新建的Student对象年龄是20,学号是2014
#import <Foundation/Foundation.h>// Person类的声明@interface Person : NSObject@property int age;@end// Person类的实现@implementation Person// 重写init方法- (id)init{ // 如果对象不为空,即进行初始化成功,那再进行赋值 if(self = [super init]){ _age = 20; } // 返回对象本身 return self;}@end// Student类的声明@interface Student : Person// 学号属性@property int id;@end// Student类的实现@implementation Student- (id)init { if(self = [super init]) _no = 2014; return self; // 返回初始化并赋值完毕的Student的对象}@end// 主函数int main() { Student *s = [[Student alloc] init]; NSLog(@"age is %i, id is %i", s.age, s.id); return 0;}
3>程序运行原理示意图
4>步骤详解
Person *p = [[Person alloc] init];
Student *s = [[Student alloc] init];
第一句,给Person分配内存空间后,执行init方法,本类中有该方法优先调用本类中该方法,Person中init方法第一句if括号内调用父类(即NSObject)中的init方法,继而执行NSObject中init方法,把isa赋值为当前类[Person Class],即isa初始化完毕。接下来返回到Person的init方法中继续进行if大括号内的语句,将_age初始化为10。Person初始化完毕。
第二句,也是类似由Student类中init方法第一句执行去调用父类Person的init方法,Person的init方法第一句执行去调用NSObject中init方法,把isa赋值为当前类[Student Class],即isa初始化完毕。Person中init方法继续执行,将_age赋值初始化为10。返回到Student中init方法,再将 _no赋值初始化为1 。Student对象创建并初始化完毕。
三、自定义构造方法
1.规范:
1>一定是对象方法,一定以 - 开头。(调用某个对象方法进行初始化)
2>返回值一定是id类型
3>方法名一般是以init开头。
4>成员变量数量:自有成员变量加父类成员变量。(NSObject默认有成员变量ISA)
2.代码实现范例
// 设置age的初始化方法- (id)initWithAge:(int)age{ // 是否初始化成功 if (self = [super init]) { _age = age; } return self;}int main() { // 如果初始化 成功,则age默认为29; Person *p = [[Person alloc ] initWithAge:29]; }
3.原则:父类的成员变量父类处理,子类的成员变量子类处理。
- OC核心语法(2)构造函数
- 黑马程序员-OC语言核心语法(2)构造方法
- OC核心语法(二)
- 黑马程序员——OC核心语法2之构造方法
- 黑马程序员——OC基础---核心语法(id,构造方法,Category,description,SEL)
- 黑马程序员 OC核心语法2
- OC核心语法
- OC核心语法
- OC核心语法
- ⑦--OC核心语法
- OC-8-核心语法
- OC语言核心语法
- OC 核心语法
- OC 核心语法罗列
- OC语法的核心
- 黑马程序员——OC核心语法点语法,成员变量,@property和@synthetic,构造方法
- OC学习之核心语法
- OC语言之核心语法
- Struts2 poi导出excel
- Spring MVC报错:The request sent by the client was syntactically incorrect ()
- sqlite基本使用方法
- 白话Aulolayout
- Struts2学习笔记——Namespace
- OC核心语法(2)构造函数
- WinCE6.0的EBOOT概要
- 常用工具
- HDU 1754 I Hate It(入门线段树)
- (三)洞悉linux下的Netfilter&iptables:内核中的rule,match和target
- UVA839 Not so Mobile【二叉树】【递归】
- JAVA 关于国际象棋棋盘的扩展
- APP云测试
- vss的安装和配置