IOS--OC--LessonInherit 遍历构造器 与自定义初始化

本文深入探讨了Objective-C中的继承机制,包括单向继承、单根继承和子类对父类特性与行为的继承。此外,文章还讲解了方法查找的顺序,强调了`super`关键字在调用父类方法中的作用。对于初始化方法的重写,作者提到了初始化父类实例变量的重要性,并对比了不同形式的自定义初始化方法。最后,文章介绍了遍历构造器的概念,阐述了其作为类方法、命名规则及返回值特点。
摘要由CSDN通过智能技术生成

一 继承
1.OC 中得继承特定
/*
1.单向继承,一个子类只能有一个父类,一个父类可以有很多个子类;
2.单根继承:根类(基类)是 NSObject.
3.子类可以继承父类的特征和行为.
*/
2. 建立继承关系之后,子类可以继承父类:
/*
// 1.实例变量,@ public 和@ protect 修饰的
// 2.公开的方法
1⃣ 一个方法如果在*.h 中声明了 那么就是公开的方法
2⃣ 一个方法如果没在*. h 中声明 那么就是私有方法 只有在类的内部访问
3⃣: OC 中么有决定的私有
*/

3.子类调用方法的过程
/*
1.现在本类中寻找方法 如果找到 直接调用
2.没有找到 就在父类中寻找 如果还没找到 就依次向上去父类的父类中找 直到找到
3.还找不到就报错
*/

4.// super :编译指令,用于调用父类的方法
/*
1.完全重写;不调用super 就是完全重写
2.在父类的基础上,添加我们需要的功能,补充功能.(super) 我们使用这个 super 调用父类的方法
3.重写父类的方法,在子类中不需要声明
5.//重写 init 的方法:
/*
1.初始化自己和父类的实例变量赋初始值
缺点 需要关心父类的实例变量 父类太多了 就会很麻烦

  - (id) init{
        _name = @"" ;
        _age = 16;
        _weight =70;
       _sex = @"男";
        _color = @"白色";
       return self;
   }
2.不考虑父类 只初始化自己的类
缺点 只给本类的的实例变量赋值 从父类继承的实例变量没有得到赋值
 - (id) init{
       _color = @"白色";
        return self;
    }
3.初始化时,每个类先通过调用[ super init]调用父类的方法,对父类的实例变量赋值,再对自身的实例变量赋值
理论可行
   -(id)init{
       [super init];  // error
        _color = @"肉色";
       return self;

    }
4. 使用 self 接收[ super init ]的返回值,然后判断 self 是否为 nil ,如果不为 nil 说明初始化成功 ,在对自身的实例变量进行初始化
   - (id) init{
        //    1.在对象方法中 self ,指的的就是对象.
        //      2.在类中 self 指的就是类
        self = [super init];
        if (self != nil){
            _color = @"粉红";
        }return self;
    }

5下面两种是不同的形式 都可以使用 看个人爱好 一定要记得最好加上 return self 谁调用 返回谁

     - (id)init {

     if (self = [super init]) {
     _color = @"橘色";
     }return self;
     }

     - (id)init {
     self = [super init]
     if (self) {
     _color = @" 透明";
     }return self;
     }

二 //遍历构造器
1. /*
1.一定是一个类方法
2.类名(小写)+With+实例变量名(首字母大写) appleWithColor;
3.一定有返回值
4.返回值类型(id ,instancetype);
*/

ps :+(id)appleWithColor:(NSString *)color
                                     kind:(NSString *)kind
              price:(CGFloat)price;
上面的遍历的自定义
- (id)initWithColor:(NSString *)color
               kind:(NSString *)kind
              price:(CGFloat)price{

self = [super init];
if (self) {
    _color = color;
    _kind  = kind;
    _price = price;
}return self;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值