OC基础-封装+继承+多态+self+类方法

来源:互联网 发布:淘宝卖家找小二介入 编辑:程序博客网 时间:2024/06/05 16:35
<1>(成员变量的)封装:set方法/get方法
1. set方法:可读可修改,为了不让外界随便的修改对象的属性值,所以通常成员变量都是被保护的(没有@public),所以通过设置一个set方法来“间接”的让对象来修改对象的成员变量值
2. set方法名的命名规范:
  1> set方法名必须以set开头
  2> set后面跟上成员变量的名称,成员变量的首字母必须大写
  3> 返回值一定是void
  4> 一定要接收一个参数,而且参数类型跟成员变量类型一致
3. get方法:只读不修改
  命名规范
  1> get方法名与成员变量名一致
  2> 一定有返回值,没有参数
4. 类的成员变量名用下划线开头,这样可以与set,get方法名区分开,还可以跟局部变量区分开


<2>OC的弱语法(知道就行,要注意不要这样写)


<3>类方法
1. 优化程序的性能(不依赖于对象,执行效率高)
2. 类方法以‘+’开头,对象方法以‘—’开头(类方法要用类来调用,对象方法要用对象来调用)
3. 调用类方法不需要依赖于对象(调用类方法并没有创建对象),所以在类方法中不能访问成员变量(实例变量),在对象方法中可以访问成员变量(实例变量)
4. 类方法名可以与对象方法名一样
5. 能用类方法尽量用类方法
6. 使用场合:当方法内部不需要用到成员变量时,就可以改为类方法
7. 工具类中一般都用类方法(工具类中基本没有,不需要用到成员变量)
8. 方法之间可以互相调用(类方法可以调用对象吗?)


<4>self关键字:’自己‘的意思,也可以理解为‘当前的’
1. self是一个指针,指向了方法调用者,谁调用这个方法self就代表谁(代表调用者[对象]),用于当局部变量和成员变量一样时,局部变量影响对象成员变量的值
2. self还可以代表类
3. 可以用于set/get方法中,不过加不加self效果一样,是等价的
4. self->成员变量     [self 方法]
5. 使用不当self,会导致死循环(类似于java的this,但是有区别)


<5>继承(类之间的关系)[子类名 : 父类名]
1. 子类可以继承父类的全部成员变量和方法,所以对于两个类中的相同成员变量和方法可以设计定义一个类
2. 基本上所有的类的根类是NSObject
3. 注意:父类的声明必须要写到子类的前面

4. 父类与子类不允许有相同的成员变量,但是可以有相同的方法,对象调用方法的时候,优先在当前类中找方法,没有就找它的父类,找到执行返回,不会即执行子类的方法又执行父类的方法,也就是只会执行一次(就近原则),如果在子类中找不到就到父类中找 ;子类父类方法重名这叫做方法重写,子类重新实现父类中某个方法,可以覆盖父类以前的做法,而只调用子类的该方法

5. 如果类与类之间的耦合性太强是一个坏处(就是说联系太紧密)
6. 继承的使用场合:
  1>当两个类拥有相同属性和方法的时候,就可以将相同的东西抽取到一个父类中
  2>当A类完全拥有B类中的部分属性和方法时,就可以考虑让B类继承A类(但这种情况并不是时时都正确的,在语法上可能是正确的,但在类与类之间的关系上可能会出现逻辑上的错误,如果遇到这种情况可以考虑使用‘组合’,[在B类中用A类定义一个指向A类的指针],这样就在B类中包含了A类,从而B类中有了A类的属性及方法)

7. 搞清楚组合和继承的区别及关系
8. 类和组合都具有传递性(原因是:指针)
9. 继承是用‘:’,继承父类的成员变量以及方法
10. 组合是用类A在类B中定义一个A类型的指针变量,传递的参数(实际上是对象)也应是A类型的,可以在B类中 用B的A类型成员变量(即A类的一个对象)调用A类的方法
11. 如果子类的方法和父类的方法相似的话,可以考虑用重写

12. super关键字
  1>当子类中重写了父类中的方法时,想在子类中重写的方法中调用父类的方法时可以使用super,super可以跨越当层类,跳到父类直接调用父类的方法
  2>super调用的方法是类方法还是对象方法取决于它当前的处境

13. 使用场景:子类重写父类的方法时想要保留父类的一些行为(要覆盖但又不是完全覆盖时可以考虑用super)


<6>多态(多种形态)
1. 没有继承就没有多态
2. 多态:父类指针指向子类对象
3. 使用多态的好处:1.如果函数/方法的形参使用的是父类类型,则可以传入父类/子类的对象;2.当父类和父类的多个子类中有相同的方法时,可以通过使用多态来降低代码的冗余度
4. 局限性:父类类型的变量 不能直接调用子类特有的方法。如果要调用的话,必须先强转为子类类型的变量后,才能直接调用子类特有的方法
5. 在这里体现出了OC的弱语法,但是系统(编译器)还是会根据真实的类型来调用方法
6. /*
     A *a = [B new];  //B类中有一个eat方法
     [a eat];   //调用方法时,会动态的检测对象的真实类型,所以调用的是 B 的 eat 方法
     */


<7>NSString
1. 字符串的创建方式有多种
2. OC中字符串的输出格式 %@
3. 可以在Xcode的API开发文档中查看详细的NSString类的方法使用细节
4. 有几个常用的方法:length(不管是汉字还是字母,只输出字符的个数),stringWithFormat:参数










0 0
原创粉丝点击