• 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
    注意
    一个刚刚分配的对象并不能立即使用
    需要先初始化该对象,然后才能使用它
    但由于未进行初始化, 随后可能出现一些不可预测的行为
    */
  • 相关阅读:
    全面理解javascript的caller,callee,call,apply概念(修改版)
    动态显示更多信息(toggle_visible函数的运用)
    再论call和apply
    RSS News Module的应用
    准备制作一套全新的DNN皮肤(包括个人定制或企业级定制)
    ControlPanel研究系列二:简单Ajax模式的ControlPanel(SimplAjax)
    New_Skin发布了....
    如何定制dnn的FckEditor
    Blog已迁移到dnnsun.com(最新DotNetNuke咨询平台)
    新DNN皮肤的经验及成果分享
  • 原文地址:https://www.cnblogs.com/yaowen/p/5314417.html
Copyright © 2020-2023  润新知