黑马程序员技术交流社区

标题: OC基础笔记-重点精简版3 [打印本页]

作者: Milk❤    时间: 2015-6-26 21:50
标题: OC基础笔记-重点精简版3
1. self关键字
self指代的是方法的调用者;
注意: 同时有对象方法和类方法存在时,self不会调错;
1>用在类方法中
ð self指代调用当前方法的类
   [类名 class];// 获取一个类对象(就是一个类)
2>用在对象方法中
ð self指代调用当前方法的对象
3>self修饰实例变量
2. 类的继承和派生基类(父类)  --> 汽车

派生类(子类) --> 卡车 小汽车1> 基类和派生类的关系
2> 方法的重写
ð 方法的重写,从父类继承的方法,可能这个方法并不适合子类,可以在子类中重写父类的方法。
ð 重写之后,父类的对象调用父类的方法;子类的对象,调用子类的方法,不会引起冲突。从父类继承的方法,不适用于子类时,可以直接声明父类的同名方法,并定义。不用考虑父类中,方法已存在的问题。
3>继承的注意事项
ð  子类不能定义和父类同名的变量,但是可以继承父类的变量
ð  OC类支持单一继承,不支持多继承
ð OC类支持多层继承
4>继承体系方法的调用顺序
ð 在自己类中找

ð  如果没有,去父类中找

ð  如果父类中没有,就去父类的父类中
ð  如果父类的父类也没有,就还往上找,直到找到基类(NSObject)
ð  如果NSObject也没有就报错了

3. super关键字
用于调用父类的方法;

4. 实例变量修饰符1> @public
任意
2> @protected
当前类派生类(子类)
3> @private
当前类
4> @package
(框架级别的)作用域介于私有和公开之间,只要处于同一个框架中就可以直接通过变量名访问;
实例变量作用域使用注意事项:
ð  在@interface @end之间声明的成员变量如果不做特别的说明,那么其默认是 protected的。
ð  一个类继承了另一个类,那么就拥有了父类的所有成员变量和方法,注意所有的成员变量它都拥有,只是有的它不能直接访问。

5. 实例变量修饰符对子类的影响
子类可以继承父类中所有的实例变量和方法,唯独不能访问父类中@private修饰的实例变量,只能看到,不能使用;
ð 能够使用父类的@public类型的变量、@protect类型的变量
ð @private 类型的变量可以看到,但是不能使用

6. OC中的私有变量(相对私有)
ð  在.m中声明的实例变量
   原因:导入类的头文件时,通常不会导入.m文件,因此其中的实例变量 不可见,也可以看做是私有的.
在类的实现即.m@implementation中也可以声明成员变量,但是因为在其他文件中通常都只是包含头文件而不会包含实现文件,所以在.m文件中声明的成员变量是@private的。在.m中定义的成员变量不能和它的头文件.h中的成员变量同名,在这期间使用@public等关键字也是徒劳的。
ð  私有变量不可见,不能被继承,不能被访问;

7. OC中的私有方法(相对私有)
OC中私有方法实现有两种方式:
ð 方法在.m中实现,不在.h中声明(相对私有)
ð 通过匿名类别(延展)实现私有(一般意义上的私有)

8. description方法
ð descriptong方法默认返回对象的描述信息(默认实现是返回类名和对象的内存地址)NSLog(@"%@", objectA);这会自动调用objectA的descriptong方法来输出ObjectA的描述信息.
ð description方法是基类NSObject所带的方法,因为其默认实现是返回类名和对象的内存地址,这样的话,使用NSLog输出OC对象,意义就不是很大,因为我们并不关心对象的内存地址,比较关心的是对象内部的一些成员变量的值。因此,会经常重写description方法,覆盖description方法的默认实现.
description重写的方法 description陷阱
千万不要在对象description方法中同时使用%@self,下面的写法是错误的:
- (NSString *)description {
  return [NSStringstringWithFormat:@"%@", self];
}
同时使用了%@self,代表要调用selfdescription方法,因此最终会导致程序陷入死循环,循环调用description方法.

9.多态
不同的对象,以自己的方式来响应同名方法的能力;
多态构成的条件
1) 存在继承关系
2) 存在同名方法,并且方法进行重写
3) 父类指针必须指向子类对象
多态使用注意
ð  同名方法一定可以调用;
ð  父类访问子类特有的方法,需要强制类型转换;
ð  注意,如果对象本身没有这个方法,强制类型转换了也要报错;

10. 类的本质
类的本质: 也是一个对象(类对象),Class类型的;
     Person *p = [Person new];
     p 实例对象
     Person 类对象  Class类型
类对象的获取:
1) 使用 实例对象 来获取
类对象获取 [实例对象名 class];
2) 使用 类名    来获取
类对象获取 [类名 class];


作者: 离经叛道的女子    时间: 2015-6-26 23:39
沙发 赞一个哦
作者: Milk❤    时间: 2015-6-27 09:53
离经叛道的女子 发表于 2015-6-26 23:39
沙发 赞一个哦

嘻嘻 thank you 思密达
作者: 578867020    时间: 2015-6-27 14:47
大赞一个  非常细心
作者: solon    时间: 2015-6-27 16:12
这个也是基础课程里面的吗
作者: aofex    时间: 2015-6-27 21:09
看一下  学习一下
作者: Milk❤    时间: 2015-6-28 17:54
578867020 发表于 2015-6-27 14:47
大赞一个  非常细心

:lol                           
作者: Milk❤    时间: 2015-6-28 17:56
solon 发表于 2015-6-27 16:12
这个也是基础课程里面的吗

是的                           
作者: Milk❤    时间: 2015-6-28 17:57
aofex 发表于 2015-6-27 21:09
看一下  学习一下

:)互相学习                             
作者: Fighting--BJ    时间: 2015-6-28 22:13
学习学习!加油!兄弟!
作者: lixianzhu0712    时间: 2015-6-29 11:29
收藏!!!棒
作者: sunqiwen2008    时间: 2015-6-29 14:38
写的真好
作者: mazhichao    时间: 2015-6-29 18:44
赞一个~
作者: 深蓝的蓝    时间: 2015-6-30 23:05
提前预习一下  快要学到了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2