• Objective-C self = [super init]理解


      初始化方法中第一句就是self = [super init]; 如下列代码。

    @interface Person : NSObject
    @property(nonatomic,copy)NSString *name;
    @property(nonatomic,copy)NSString *sex;
    -(instancetype)initWithName:(NSString *)name
                                         sex:(NSString *)sex;
    @end
    
    @implementation Person
    -(instancetype)initWithName:(NSString *)name
                            sex:(NSString *)sex{
        self = [super init];
        if (self ) {
            _name = name;
            _sex = sex;
        }
        return self;
    }
    @end  
    
    

      那么self = [super init]到底做了什么呢,又有什么作用?

    在解释之前,先回忆一些必要的知识。

    1、关于继承

      因为类是有继承特性的,把公共的方法和实例变量写在父类里,子类只需要写自己独有的实例变量和方法即可。

      继承的内容是:所有的实例变量和方法。而且,子类不满意父类方法的话,可以重写。

      继承有单向性,传递性,唯一性。

    2、了解super和self的意义。

      super是编译器指令,并非对象。

      作用:给super发消息,可以执行父类该方法的实现。

      self是系统关键字。self在方法中指代当前方法的调用者。

      self在实例方法中,指代调用当前方法的对象。

      self在类方法中,指代当前类。

    在理解这个问题前需要的知识储备都介绍完了。

      首先,因为类是有父类的,而子类定义了除父类中公共实例变量之外的实例变量。所以,在自身的初始化方法中,优先向super发送init消息[super init],初始化父类中公共变量。

      其次父类再给父类的父类发送[super init],直到根类NSObject。初始化成功后,再初始化自身特有的变量,从而实现全部变量的初始化。

      最后返回self(初始化完成的对象)。

  • 相关阅读:
    [SNOI2019]数论
    2018-8-10-C#-写系统日志
    2018-8-10-C#-写系统日志
    2019-3-1-C#-double-好用的扩展
    2019-3-1-C#-double-好用的扩展
    2019-8-31-dotnet-Framework-源代码-·-Ink
    2019-8-31-dotnet-Framework-源代码-·-Ink
    2019-8-31-How-to-fix-nuget-Unrecognized-license-type-MIT-when-pack
    2019-8-31-How-to-fix-nuget-Unrecognized-license-type-MIT-when-pack
    2018-9-30-C#-传入-params-object-长度
  • 原文地址:https://www.cnblogs.com/ohmg/p/5228970.html
Copyright © 2020-2023  润新知