zoukankan      html  css  js  c++  java
  • oc-28-构造函数

    Dog.h
    #import <Foundation/Foundation.h>
    
    @interface Dog : NSObject
    {
        NSString *_name;
        int _age;
        char *cc;
    }
    @end
    
    Dog.m
    #import "Dog.h"
    
    @implementation Dog
    
    // 谁调用Self所在的方法,self就指向谁,self就是谁.
    - (instancetype)init
    {
        /**
         *  重写init方法是有条件的
         */
        // self是谁?DogSon
        if (self = [super init]) {//初始化父类的
        // 子类的初始化等等其他操作,在这个花括号里面做
            _age = 1;
            NSLog(@"Dog---%@",self);
        }
        return self;
    }
    
    @end
    
    DogSon.h
    #import "Dog.h"
    
    @interface DogSon : Dog
    // 自定义构造方法
    // 命名的时候:init后边接的单词,首字母必须大写.
    - (instancetype)initWithName:(NSString *)name andAge:(int)age;
    @end
    
    
    
    /*
    1.自定义构造方法
    
    1.自定义构造方法的规范
    (1)一定是对象方法,以减号开头
    (2)返回值一般是id(instancetype)类型
    (3)方法名一定以initWith开头
    
     3.自定义构造方法的使用注意
     (1)自己做自己的事情
     (2)父类的方法交给父类的方法来处理,子类的方法处理子类自己独有的属性
     */
    
    DogSon.m
    #import "DogSon.h"
    
    @implementation DogSon
    - (instancetype)initWithName:(NSString *)name andAge:(int)age
    {
       // 必须调回父类的构造方法
        if (self = [super init]) {
            _name = name;
            _age = age;
        }
        return self;
    }
    //- (instancetype)init
    //{
    //    if (self = [super init])
    //    {
    //        _age = 10;
    //    }
    //    return self;
    //}
    @end
    
    
    main.m
    //05-12
    
    
    /**
     new一下,就能有一个对象.
     1.分配内存空间 + alloc
     2.初始化.     - init
     
     构造方法:指的就是初始化方法.
     
     需求1:创建10只狗,让这些狗在创建时,所有的年龄都是1岁.
     修改构造函数可以考虑重写init方法.
     
     初始化成员变量
     OC对象初始化为nil
     C语言指针初始化为:NULL
     基本数据类型初始化:0
     
     
     需求2:创建10只小狗,让这些狗在创建时,可以手动进行成员变量的赋值.
     */
    #import <Foundation/Foundation.h>
    #import "DogSon.h"
    
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            
            DogSon *s = [[DogSon alloc] initWithName:@"旺财" andAge:1];
            
        }
        return 0;
    }
    
    
    /**
    1.构造方法
    
    1.构造方法的调用
    
    完整的创建一个可用的对象:Person *p=[Person new];
    
    new方法的内部会分别调用两个方法来完成3件事情:
    
    (1)使用alloc方法来分配存储空间(返回分配的对象);
    (2)使用init方法来对对象进行初始化。
    (3)返回对象的首地址.
    可以把new方法拆开如下:
    
    (1).调用类方法+alloc分配存储空间,返回未经初始化的对象 Person *p1=[Person alloc];
    (2).调用对象方法-init进行初始化,返回对象本身Person *p2=[p1 init];
    (3).以上两个过程整合为一句:Person *p=[[Person alloc] init];
    
    说明:
    
    (1)init方法就是构造方法,是用来初始化对象的方法,注意这是一个对象方法,以减号开头。默认初始化完毕后,所有成员变量的值都为0。
    (2) alloc
    向某个类发送alloc消息的结果
    为该类分配内存,以存放该类的全部实例变量
    还将这块内存区域全部初始化为0
    注意
    一个刚刚分配的对象并不能立即使用
    需要先初始化该对象,然后才能使用它
    但由于未进行初始化, 随后可能出现一些不可预测的行为
    */
  • 相关阅读:
    CodeForces 734F Anton and School
    CodeForces 733F Drivers Dissatisfaction
    CodeForces 733C Epidemic in Monstropolis
    ZOJ 3498 Javabeans
    ZOJ 3497 Mistwald
    ZOJ 3495 Lego Bricks
    CodeForces 732F Tourist Reform
    CodeForces 732E Sockets
    CodeForces 731E Funny Game
    CodeForces 731D 80-th Level Archeology
  • 原文地址:https://www.cnblogs.com/yaowen/p/5314417.html
Copyright © 2011-2022 走看看