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培训、期待与您交流! ----------

0 0
原创粉丝点击