A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 1130488283 中级黑马   /  2016-7-9 21:43  /  1320 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1.
new方法的作用:
创建并初始化对象,最后返回这个对象的地址。
new方法是定义在NSObject类中的

NSObject
让我们自定义的类具备创建对象的能力
NSObject类是所有类的基类
其中有一个属性是isa,所以每一个OC对象都有一个isa的属性

2.
当子类声明的属性和父类那里继承来的属性同名的时候,就算类型不同也会报错

super关键字:
要在子类的对象方法中调用从父类继承过来的对象方法,可以使用self来调用

如果你调用的方法真是从父类中继承过来的,建议使用super,可读性会提高

3.
@private 私有属性,只能在当前类中访问
注意:子类可以继承父类的@private修饰的属性,并且在子类外部也无法直接访问

@protected 受保护的,只能在当前类和当前类的子类中访问,但在类的外部仍然不能访问

@pubulic 公共的属性,在任何地方都可以访问

注意:如果想被外界访问,就封装成getter和setter
           如果父类属性不希望被子类访问,那么就用@private
            如果父类属性想给子类访问,但是别的地方不行,就用@protected

4.
访问修饰符只能修饰属性,不能修饰方法

5.
里氏替换原则LSP:
子类对象可以替换父类对象的位置,并且程序的功能不受影响

当一个父类指针指向了一个子类对象的时候,对程序没有任何影响,就是里氏替换原则

HMPerson *p1 = [HMStudent new];

局限性:当父类指针指向子类对象,并且调用了子类独有的方法时编译会报错

解决方法:调用方法的时候强转成子类类型的指针

6.
NSObject类型的指针是万能指针,它可以指向任何OC对象的地址

NSObject *obj = 10;  // 错误写法

NSObject *obj = @“jack”;

如果一个数组元素类型是NSObject*类型的,那么这个数组就可以存储任意的OC对象

7.
重写会不会把父类的方法给覆盖啦???

既然重写啦,调用的就是重写后的方法

重写使用场景:
(1)子类对象想重新实现父类的方法
(2)父类的方法不能够满足子类的需求,此时需要先用super调用一次父类的方法,然后在加上自己的代码

特别注意:重写一般都写在实现的这个文件里


8.
多态:同一种行为,具有不同的表现形式

9.
用%@打印对象

HMPerson *p1 = [HMPerson new];

NSLog(@“%@”,p1);

输出:<HMPerson: 0x1005000a0>
[对象所属类名:对象地址]

解决方案:先调用 description方法,将其返回的字符串输出到控制台

HMPerson *p1 = [HMPerson new];
NSString *str = [p1 description];
NSLog(@“%@”,p1);

description方法的实现就是返回一个格式字符串
@“<对象所属的类名:对象的地址>”

重写description方法:

-(NSString *)description
{  
      return @“哈哈哈哈哈”
}

-(NSString *)description
{
        return [NSSting stringWithFormat:@“姓名:%@ 年龄:%d”,_name,_age];
}


10.
对象调用对象方法的方式:

方式1> 创建对象,直接调用
        HMPerson *p1 = [HMPerson new];
       
        [p1 sayHi];

方式2>手动为对象发送SEL消息
        HMPerson *p1 = [HMPerson new];

        [p1 performSelector:@“selector(sayHi)”];




4 个回复

倒序浏览
继续加油
回复 使用道具 举报
加油 加油 加油 加油 加油 加油 加油 加油 加油
回复 使用道具 举报
加油!
回复 使用道具 举报
     可以  的  加油
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马