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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Milk❤ 初级黑马   /  2015-6-26 21:50  /  1098 人查看  /  13 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

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];

13 个回复

倒序浏览
沙发 赞一个哦
回复 使用道具 举报

嘻嘻 thank you 思密达
回复 使用道具 举报
大赞一个  非常细心
回复 使用道具 举报
这个也是基础课程里面的吗
回复 使用道具 举报
看一下  学习一下
回复 使用道具 举报
578867020 发表于 2015-6-27 14:47
大赞一个  非常细心

:lol                           
回复 使用道具 举报
solon 发表于 2015-6-27 16:12
这个也是基础课程里面的吗

是的                           
回复 使用道具 举报
aofex 发表于 2015-6-27 21:09
看一下  学习一下

:)互相学习                             
回复 使用道具 举报
学习学习!加油!兄弟!
回复 使用道具 举报
收藏!!!棒
回复 使用道具 举报
写的真好
回复 使用道具 举报
赞一个~
回复 使用道具 举报
提前预习一下  快要学到了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马