Objective-C 面向对象

来源:互联网 发布:monaco 字体 windows 编辑:程序博客网 时间:2024/06/03 17:08

29.self和super

OC提供两个保留字self和super,用于在方法定义中引用执行该方法的对象。

OC语言中的self,就相当于C++、Java中的this指针

super发送消息可以将方法实现分发其父类。可以重写一个已有的方法来修改或将它添加到现有的方法中,仍然可以将原始的方法纳入到修改后的方法当中。

①self的应用场景

    1)用在类方法中;

    2)用在对象方法中;

    3)访问成员变量;

    4)self在OC的内存管理特殊使用;

self在对象方法中使用,调用的是当前对象方法的那个对象

self在类方法中使用,调用的一定不是当前创建的对象,而是类对象。

[p class]返回的实质就是当前类(类对象)

self = 该类

②总结:

    1)谁调用当前方法,self就代表谁;

    2)self在对象方法中,self代表当前对象;

    3)self在类方法中,self代表类;

    4)[self 方法名称];    //调用其他方法(类方法、对象方法)

    5)self可以简单理解为指自己;


30.继承

派生类方法属性 = 基类方法属性 +  派生类自己新增的方法和属性

①注意:

    1)基类的私有属性不能被继承,不能被使用;

    2)OC中的继承是单继承:也就是说一个类只能一个父类,不能继承多个父类;

    3)继承的合理性;

    4)子类不能定义和父类同名的变量,但是可以继承父类的变量

    5)OC支持单一继承,不支持多继承;

    6)OC支持多层继承;

    7)子类可以继承父类所有的实例变量的属性和方法,但是,不是所有的都能访问!

    8)在@interface和@end之间默认的修饰符是@protected

②继承体系中方法调用的顺序

    1)在自己类找;

    2)若没有,在父类中找;

    3)若父类也没有,就去父类的父类找;

    4)....一直向上层找,直到找到基类(NSObject);

    5)如果NSObject都没有就报错了


31.重写

把父类的方法,在子类中重新给实现了,这种做法就称之为:方法的重写


32.实例变量修饰符

① @public(公开的):在有对象的前提下,任何地方都可以直接访问

② @protected(受保护的):只能在当前类和子类的对象中使用

③ @private(私有的):只能在当前类的对象中使用

④ @package(框架级别的):作用域介于私有和公开之间,只要处于同一个框架中都可以直接通过变量名访问


33.OC中的私有方法

在.h中没有声明,在.m中实现,此时该方法被成为私有方法。不能在其他类中访问。


34.description

description方法是基类NSObject所带的方法,因为其默认实现时返回类名和对象的内存地址。

但是,我们经常会重写description,覆盖description的默认实现。

有两种重写description一种时实例方法,一种是类方法

例如:

    //重写

    -(NSString *) description{

        return [NSString stringWithFormat:@"数组1:%d,数字2:%d,结果:%.2f",_num1,_num2,_result];

    }

    //调用:

    NSLog(@"%@",cal);


35.多态

多态就是某一类事物的多种形态。

①程序中的多态:不同的对象以自己的方式响应相同名称方法的能力成为多态;

②多态的条件

    1)有继承关系、有方法重写;

    2)父类的声明变量指向子类对象;

③多态的优点

    多态的主要好处就是简化了编程接口,它容许在类和类之间重用一些习惯性的命名,而不用为每一个新加的函数命名一个新名字。这样,编程借口就是一些抽象的行为的集合,从而和实现接口的类的区分开来。


36.类的本质


②获取类对象

//通过类名获取类对象

Class c1 = [Person Class];

//通过实例对象来获取类对象

Person *p1 = [Person new];

Class c2 = [p1 Class];



37.SEL

SEL:全称为selector,表示方法的存储位置


Person *p2 = [Person new];

[p2 test];

//手动地把test方法包装成SEL类型

SEL s2 = @selector(test);

[p2 performSelector:s2];   //等同于[p2 test];


0 0
原创粉丝点击