OC基础—构造方法
来源:互联网 发布:淘宝卖家退款给买家 编辑:程序博客网 时间:2024/06/05 21:14
------ android培训、java培训、期待与您交流! ----------
OC基础—构造方法
构造方法:
以前我们创建对象的时候像这样
Person *p = [Person new];但是这个new我们在实际工作中不常用,应为new做的事情太单调。
要完整的创建一个可用的对象要分两步的
1. 分配存储空间(+alloc,类方法)
2. 初始化(-init,对象方法)
像这样:
// 1调用+allot方法分配空间 这个时候p1不可用 Person *p1 = [Person alloc]; // 2调用-init方法 初始化 Person *p2 = [p1 init];这两句可以成为一句:
// 以后创建对象都这么写 Person *p3 = [[Person alloc] init];
以后就好这么写,统统改过来。
这里的init方法就是构造方法,用来初始化对象的方法,是一个对象方法,以 - 开头
有时候我们需要一些要求,比如说每个对象创建出来,他的_age都是10,这个时候我们就需要重写init方法。就像下面这样
#import "Person.h"@implementation Person// 重写init方法- (id)init{ //条件 // 1一定要调用supper的init方法 初始化父类中声明的变量和其他属性 // self = [super init] // 返回当前对象self // 2如果对象初始化成功 才有必要进行接下来的初始化 if(self = [super init]) // 判断 创建的对象是否成功 { //初始化成功 _age = 10; } return self;}@end重写init方法的条件:
1. 一定要调用supper的init方法 初始化父类中声明的变量和其他属性self = [super init],返回当前对象self。
2. 如果对象初始化成功 才有必要进行接下来的初始化。
总结一下:
重写构造法方法的目的:为了让对象创造出来,成员变量就会有一些固定的值。
重写构造方法的注意点
1、先调用父类的构造的方法([super init])
2、在进行子类内部成员变量的初始化
自定义构造方法
自定义构造方法:
每个对象创建出来之后都有各自的名称,这个时候就需要自定义构造方法,上面的构造方法对象创建出来之后都是一样的值,自定义构造方法就可以传值使创建出来的对象拥有不同的初始化值。
比如:
#import <Foundation/Foundation.h>@interface Person : NSObject@property NSString *name;@property int age;// 自定义构造方法/* 规范 1.一定以 - 好开头 2.返回值一般是id类型 3.方法名一般以init开头 */- (id)initWithName:(NSString *)name; - (id)initWithAge:(int)age;- (id)initWithName:(NSString *)name andAge:(int)age;@end这里的方法就是自定义构造方法,当然是有规范的
1.一定以 - 好开头
2.返回值一般是id类型
3.方法名一般以init开头
方法的实现如下
#import "Person.h"@implementation Person// 要求默认名称不一样 自定义构造方法- (id)initWithName:(NSString *)name{ if ( self = [super init]) { _name = name; } return self;}- (id)initWithAge:(int)age{ if ( self = [super init]) { _age = age; } return self;}-(id)initWithName:(NSString *)name andAge:(int)age{ if ( self = [super init]) { _name = name; _age = age; } return self;}
这样就可以根据自己的需求自定义构造方法。
调用的时候:
#import <Foundation/Foundation.h>#import "Person.h"#import "Student.h"int main( ){ Person *p1 = [[Person alloc] initWithName:@"hehehe"]; NSLog(@"%@", p1.name); Person *p2 = [[Person alloc] initWithAge:10]; NSLog(@"%d", p2.age); Person *p3 = [[Person alloc] initWithName:@"liye" andAge:25]; NSLog(@"name = %@ and age = %d", p3.name, p3.age); return 0;}
这样刚对象刚创建初始化的时候就可以赋值我们需要的值,而不用在调用方法传值,方便简单。
------ android培训、java培训、期待与您交流! ----------
- OC基础—构造方法
- 黑马程序员——OC基础——构造方法
- 黑马程序员——OC基础——构造方法
- OC基础——点语法、@property、id、构造方法
- 黑马程序员——OC基础---构造方法
- OC基础第五章:构造方法
- OC-020.OC的构造方法-01基础
- 黑马程序员—OC语言基础—构造方法和分类
- 黑马程序员——OC基础---核心语法(id,构造方法,Category,description,SEL)
- OC基础:继承.初始化方法,便利构造器
- 黑马程序员---iOS基础----OC中的点语法、构造方法
- oc基础第6天-构造方法
- oc基础之继承与重写构造方法(三)
- OC基础DAY05 - 点语法和构造方法
- OC构造方法、Category
- OC语言构造方法
- OC构造方法
- OC之构造方法
- Objective-C Class Dump
- C语言的模块编写规范
- 能上网即可实现个人电脑做web网站服务器
- 黑马程序员—JAVA基础之继承、抽象类、接口
- jdk与tomcat的安装
- OC基础—构造方法
- UVa 408 - Uniform Generator
- 入栈出栈操作
- 创建一个Mac OS X 下的Cocoa Application对话框 详解
- 六种常见的数据加载模式设计
- window后台服务创建与删除
- XCode 4 的调试定位技巧
- Pyston——基于LLVM和现代JIT技术的开源Python实现
- NYOJ 127 星际之门(一)