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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨光0618 中级黑马   /  2016-8-22 18:48  /  908 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨光0618 于 2016-8-22 18:53 编辑

Mark 01 NSObject类

1.NSObject是Foundation框架中的一个类
  • 在这个类中有一个new方法
    • 作用:创建一个对象,并初始化对象,将这个对象的地址返回
  • 创建的类必须直接的或间接的从NSObject父类继承

2.super关键字
  • 在对象方法中使用super
    • 如果调用的方法真的是从父类继承而来,建议是用super,代码可读性更高
  • 类方法中也可以使用super

3.类方法能否被继承
  • 类方法可以被继承,通过子类可以调用
  • 在内存中只有一份
  • 使用super显式的从父类继承过来的类方法
  • 调用类方法
    • 使用父类名
    • 使用子类名
    • 使用self来调用
    • 使用super也可以调用
  • super关键字在对象方法中显式的调用从父类继承过来的对象方法,在类方法中

4.访问修饰符
  • @pravite
    • 私有属性,只能在本类中访问,除了这个类的内部,其它地方都是无权访问的
    • 父类的私有成员,子类也是可以继承的,只不过在子类中无法继承私有成员
  • @protected
    • 受保护的,被@protected修饰的属性,只能在本类和子类中访问
  • @package
    • 被@package修饰的属性,只能在当前这个target访问
  • @public
    • 公共属性,被@public修饰的属性,可以任意访问
  • 如果没有属性加修饰符,默认为@protected属性
  • 修饰符的作用域
    • 从访问修饰符开始,到下一个访问修饰符或者遇到大括号,结束

5.私有属性和私有方法的应用
  • 类的属性还可以定义在@implementation中,任何访问修饰符无效,都是私有的
  • 定义在@implementation中和定义在@interface中的唯一区别是,Xcode不提示
  • 使用建议
    • 写类,一般有两种属性
    • 一种是在.h中用protected修饰的
    • 一种是在.m中的真私有属性
  • OC中没有真正的私有
6.私有方法
  • 访问修饰符只能修饰属性,不能修饰方法
  • 私有方法的办法是只写实现,不写声明

Mark 02 里氏替换  LSP

1.子类对象可以替换父类对象的位置,并且程序的功能不受影响
  • 里氏替换的优点
    • 一个指针不仅仅可以存储本类对象的地址,还可以存储子类对象的地址
    • 如果一个指针的类型,是NSObject类型,那么这个指针当中可以存储任意OC对象的地址
    • NSObject类型的指针也叫万能指针
    • 如果一个数组的元素的类型是一个父类型指针,那么这个数组中既可以存储本类对象,也可以存储子类对象
    • 如果一个数组元素的类型是NSObject类型的,那么这个指针可以存储任意类型的OC对象
  • 局限性
    • 当一个父类指针指向一个子类对象的时候,只能通过这个父类指针去访问这个子类对象的父类成员,子类独有的属性不能访问

Mark 03 方法重写

1.子类有这个方法,但是子类和这个方法的实现不一样
  • 父类继承过来的方法,子类完全不适用,重写方法
2.子类认为父类的方法做的事情还不够,想要在父类方法的基础之上,在多做一些事情
  • 需要使用super关键字来调用父类的方法,然后添加自己的实现[super 父类方法];
在.m文件中,重新实现要重写的方法,不是声明,也不需要再次声明

如果一个父类指针,指向的是子类的方法,那么通过这个父类指针,调用子类方法的时候,调用的是子类修改后的方法

Mark 04  多态

1.同一种行为,对于不同的事物而言,具有完全不同的表现形式

2.多态是个现象

Mark 05

1.NSLog打印一个对象的时候
  • 可以使用%p,也可以使用%@
    • %p打印的是指针变量的值,也就是对象的地址
    • %@打印的是指针指向的对象
  • %@打印的原理
    • 先调用传入的对象的description方法,这个方法有一个返回值,是NSString字符串
    • 拿到这个方法返回的字符串数据,将这个字符串输出在控制台
  • description方法是定义在NSObject类的一个方法,所以这个方法所有的对象都有
    • @"<对象所属的类名:对象的地址>"
  • 如果你想自定义打印对象的格式,那么只需要重写Description方法的实现即可

Mark 06 特有语法

1.子类对象有子类和它所属的父类的所有属性
  • 子类创建对象的时候,会在堆区中申请空间,只会申请属性所占的空间
  • 子类调用方法时,方法的查找顺序
    • 首先会在本类中寻找,如果有直接调用,如果没有会向直接父类中寻找,如果有会调用,如果没有会继续寻找,知道NSObject这个类,如果依旧没有,报错!

2.关于类加载
  • 类何时加载
    • 当类第一次被访问的时候
  • 类以什么形式存储到代码区
    • 任何存储在内存中的数据都有类型
    • 加载类到代码段中的过程
      • 现在代码段中创建一个Class类型的对象
      • Class类是一个对象,是系统定义的
      • Class对象用来存储类的信息
      • 类是以Class对象的形式存储在代码段中
  • 何时回收存储在代码区中的类
    • 当程序结束的时候
3.SEL数据
  • SEL是一个变量,这个变量可以存储一个方法
    • SEL 别名;
    • 别名 = @selector(方法名);
    • 通过SEL包装的的方法,即使是私有的方法,也可以调用
      • [对象  performSeletor:对象名];











0 个回复

您需要登录后才可以回帖 登录 | 加入黑马