Objective-C---2---初始化、便利构造器

1. 继承

继承在OC中是单向

OC中只允许单继承和C++不一样

子类可以重写父类的方法

声明子类的setter和getter方法时,只要实现自己的成员变量即可,不用写父类的,父类的已经封装完成了,你直接调用就可以啦


基础知识补充:

NSInteger 包括:int long short

创建一个对象,对象放在堆区   栈区存放变量

Person *per1 = [[Person alloc] init];

 对象:[[Person alloc] init]

per1:是指针

  [self 方法名];  
//  self出现在对象方法中,则指当前的对象,如果出现在类方法中,则指当前类
  NSLog(@"self = %@", [self class]);
//  可以查看现在的对象所属的类是什么

//  <strong>没有创建对象时,通过super关键字调用父类方法</strong>



#pragma mark---------------------self这部分比较绕,可以仔细理解一下--------------

//  <strong>self:是谁调用的就是谁所属的类:</strong>  以下是例子

/*  声明一个Student和CollegeStudent类,CollegeStudent继承于Student类
    在Student类中定义了一个sleep方法:
<pre name="code" class="objc">    CollegeStudent中没有重写sleep方法,只是单纯的继承
*/
- (void)sleep{
    NSLog(@"SLEEPING......");
    NSLog(@"self = %@", [self class]);

}

/* CollegeStudent *p = [CollegeStudent new];
[p sleep];
在sleep中的self的值:
*/
    NSLog(@"self = %@", [self class]);  //   ----------->中的self打印之后的结果:CollegeStudent
//   <strong>因为是p调用的sleep,所以返回的是p的所属类,不是sleep所在的类Student</strong>

2. 初始化

 1.  之前使用的初始化方法:

- (id)init{
    _name = @"李莫愁";
    _sex = @"女";
    return self;
}

//  也有这样写的初始化方法:
- (id)init{
    self = [super init];
        _name = @"黄蓉";
    return self;
}


- (id)init{
  self = [super init];  //   调用父类的初始化方法,将继承下来的变量进行初始化
    if (self != nil) {
       //  初始化方法
        _name = @"小龙女";
        _sex = @"女";
        
    }
    return self;
}


2. 完整的初始化方法:

- (id)init{
    self = [super init];  //   调用父类的初始化方法,将继承下来的变量进行初始化
    if (self) {
        //  初始化设置
        _name = @"灭绝师太";
        _sex = @"女";
        
    }
    return self;   //  返回初始化完成的self
}


 3.  self:如同指针

在动态方法中(-方法/对象方法):self代表对象

在静态方法中(+方法/类方法):self代表类

[super init]:发送消息,要调用父类初始化方法,然后返回给子类

- (id)initWithName:(NSString *)name
               Sex:(NSString *)sex
               Age:(NSInteger)age{
    self = [super init];
    if (self) {
        _name = name;
        _sex = sex;
        _age = age;
        
        //  下面两个NSLog打印出来的  只是测试一下
        NSLog(@"%@", NSStringFromClass([self class]));
        NSLog(@"%s",__FUNCTION__);
    }
    return self;
}


打印的结果:

Person
-[Person initWithName:Sex:Age:]

id和instancetype用起来一样

 

3. 便利构造器:

+ (Person *)personWithName:(NSString *)name
                       Age:(NSInteger)age
                       Sex:(NSString *)sex{
    // 便利构造器内部创建对象
    //  便利构造器已经创建了对象,直接调用就可以了,不用再创建新的啦
    Person *p = [[[Person alloc] initWithName:name Sex:sex Age:age] autorelease];
    return p;
}

//  main函数中调用时:不用alloc或new创建
Person *p = [Person personWithName:@"夏目" Age:16 Sex:@"男"];


 

   析构函数:

- (void)dealloc{
[super dealloc];
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值