黑马入门教程笔记03-OC


1、self使用总结

self简单地理解就是自己


2、继承的注意事项

子类不能定义与父类同名的变量,但是可以继承父类的变量;

OC类支持单一继承,不支持多继承;

OC类支持多层继承。


2、实例变量的作用域

public:任意程序集

protected: 同一类和派生类(子类)(默认)

private: 同一类(不能被子类访问,但是能被子类继承(只能看,不能用))


3、OC中的私有变量

在类的实现即.m文件中可以声明成员变量,但是因为在其他文件中通常都只是包含头文件而不会包含实现文件,所以在.m文件中声明的成员变量是@private,在.m中定义的成

员变量不能和它的头文件.h中的成员变量同名,在这期间使用@public等关键字也是徒劳。

在.m文件中定义实例变量,是纯私有的变量,该变量只能在当前类中使用,不能被子类继承,也不能被访问(不能看,不能用)。


4、OC中的私有方法

在.h中没有声明,在.m中实现,此时该方法就被称为私有方法(不能被子类继承和访问)。


5、在类方法中不能访问实例变量


6、description

        Dog *d = [Dog new];
        [d run];
        //查看对象地址0x1002066e0
        NSLog(@"%p",d);
        //查看对象实例变量的值
        [d setAge:22];
        NSLog(@"%d",[d age]);
    
        //类名   对象的地址
        //实质上,就是调用了对象的description方法,默认是得到<类名 对象的地址>
        //可以通过重写description方法来得到需要的信息
        NSLog(@"%@",d);//<Dog: 0x1002066e0>
        //[d class]--->Dog
        //以%@的形式,打印类信息
        NSLog(@"%@",[d class]);//Dog


description的陷阱,千万不要再description方法中同时使用%@和self,同时使用代表要调用self和description方法,因此最终会导致程序陷入死循环,循环调用description方法。


7、多态

多态就是某一类事务的多种形态。程序中的多态,不同的对象以自己的方式响应相同名称方法的能力。

多态的条件:有继承关系,有方法重写,父类的声明变量指向子类对象。

狗 *g = [狗  new];

动物 *a = [狗  new];//代码体现:用父类类型的指针指向了子类对象,这就是多态。

多态的优点:简化了编程接口,容许在类和类之间重用一些习惯性命名。

        //没有使用多态
        Animal *a1 = [Animal new];
        [a1 run];
        Dog *d1 = [Dog new];
        [d1 run];
        Cat *c1 = [Cat new];
        [c1 run];
        
        //使用多态
        //父类指针 指向了 子类的方法
        Animal *a2 = [Dog new];
        [a2 run];//狗跑出去了
        Animal *a3 = [Cat new];
        [a3 run];//猫爬树

多态的原理,动态绑定:
动态类型能使程序执行时才确定对象所属类型。

动态类型绑定能使程序执行才确定要对对象调用的实际方法。

OC不同于传统程序设计语言,它可以再运行时加入新的数据类型和新的程序模块,动态类型识别,动态绑定,动态加载

id类型,通用指针类型,弱类型,编译时不进行类型检查。

 
        //多态的使用注意
        Animal *a4 = [Dog new];
        //a4 是 Animal类型
        //在编译的时候会报错
//        [a4 eat];//报错
        
        //把a4强制转换为Dog类型,此时就不会报错
        [(Dog *)a4 eat];
        
        //下面用法是错误的
        Animal *a5 = [Animal new];
        //骗编译器,编译通过
        //运行是错误的
//        [(Dog *)a5 eat];


8、类对象

类的本质是一个对象(类对象)

        //类对象的获取方法
        //1、类对象属于Class类型
        Class c1 = [d class];//Dog
        Class c2 = [d1 class];//Dog
        NSLog(@"%p",c1);//0x1000011c0
        NSLog(@"%p",c2);//0x1000011c0
        
        //2、通过类名来获取类对象
        Class c3 = [Dog class];
        NSLog(@"%p",c3);//0x1000011c0

9、SEL类型

SEL,全称selection表示方法的存储位置。

SEL其实是对方法的包装,将方法包装为一种SEL类型的数据,去寻找对应方法的地址。

        Person *p = [Person new];
//        [p test];
        //手动把test方法包装成SEL类型
        SEL s1 = @selector(test);
        //响应方法
        [p performSelector:s1];




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值