1.@"",这个符号表示将一个c的字符串转化为oc中的字符串对象NSString.
2.
在main.m源文件中定义c语言函数,不但可以定义,也可以调用.
需要声明.有两种方法,一个是全局声明,写在main函数之上,局部声明 写在main函数内部.
3.oc中的数据类型:
基本数据类型:1数值型,2字符型(char),3布尔型(BOOL),4空类型(void).
Block类型.
指针数据类型:2类(class),3id类型(万能指针).
特殊类型:1.SEL,2,nil(空).
4.用来保存逻辑值
Boolean 就是typedef给unsigned char类型取了个boolean这个别名.随后用宏定义将1强转为Blooean(unsigned char)类型并用true代替.false类似取值为ture和false.
BOOL 同上,取值为YES和NO.
5.OC中新增的异常捕捉方法.
@try {放有可能出错的代码}
@catch(NSException){放出错以后,我们处理的代码} @finally{不管是否出错程序都会执行的代码}
@try并不能检测出所有的错误代码.
6.#pragma mark指令:对代码的分组,方便代码查找和导航用的
一.类方法
1).类方法可以和实例方法同名,并不影响使用,两个方法调用的对象不同,不会有交叉影响.
2)类方法也可以从父类继承而来,子类可以重写类方法.
3).类方法一样在@interface里声明,@implementation里实现.
4).类方法只能被向类方法发送类方法消息才能执行.
5).在类方法里使用了self,这个self执行的类对象class object 而不是实例对象instance object.
二.易犯错误.
1).在类方法中,不允许访问实例变量.
三.对象方法中可以调用其他的对象方法:
1)在当前对象方法中创建对象,使用新创建的对象调用对象方法.
2)可以使用self.
3)对象可以作为方法的参数传递过来,可以使用传递过来的对象调用方法.
四.在类方法中可以调用其他类的方法:
1)可以直接使用本类类名和其他类名去调用类方法.
2) 类方法可以调用对象方法(是通过将对象作为参数传入方法,可以直接创建一个对象.)和其他类方法.
3)类方法不能调用自身
五.类方法应用场景:
1) 如果调用一个方法,该方法中不需要使用成员变量,就可以声明为类方法.
多态概念和条件.
一.什么是多态:就是某一种事物的多重形态.
程序中的多态就是:不同的对象以自己的方式响应相同名称方法的能力称为多态.
二.多态的条件: 1)有继承关系, 有方法重写.父类的声明变量指向子类对象.2)代码体现:用父类类型的指针指向了子类对象.就是多态.
三.多态的有点:简化了编程接口,它容许类和类之间重用一些习惯性的命名,而不需要为每一个新加的函数命名一个新名字.
多态的原理:
动态绑定:
1) 动态类型能使程序直到执行时才确定对象所属类型.
2)动态类型绑定能使程序知道执行时才确定要对对象调用的实际方法.
id类型:是通用指针,弱类型,编译时不进行类型检查.
多态的注意点:
父类调用子类特有的方法时 , 需要对父类的指针进行强制类型转换,将父类的类型的指针转成子类类型的.(此时父类操作的对象是子类创建的)
一、 继承
1.如何继承:
1,导入要继承的那个类的头文件
2. interface 类名:父类名
2.重写:
1.把父类的方法,在子类中重新实现了,这种方法就叫重写
3.继承的注意事项:
1.子类不能重复定义和父类同名的变量,但是可以继承父类的变量
二、实例变量修饰符
1.作用域:
1.@public:任意程序集能够通过实例变量访问(在同一个文件夹内的别的文件也可以访问)。 作用域:在没有遇到其他修饰符时,直到整个声明的大括号结束。
@public类型的变量,在子类中可以正常的访问和使用。
2.@protcted:同一类和派生类(当前类和子类)。
protected类型的变量,在子类中可以使用,在其他类不能使用。
3.@private:私有的,表示只能在当前类使用
@private类型的变量,能被子类继承,但是不能被访问。(子类可以继承父类所以的实例变量和方法,但是不是所有的都可以访问)
三.私有变量
1.在.m文件中定义的实例变量是纯私有的变量,只能在当前类中使用,不能被子类继承,也不能被子类访问.(每个文件中的变量都不会互相影响)
四.OC中的私有方法:在.h中没有声明,在.m中实现了,就叫私有方法(相对私有)
1.没有在.h文件中声明,在.m文件中实现,不能被子类继承和访问.自己类也不能访问.但是可以在当前类的实现里写[self 方法]去访问.
四.description方法介绍及重写:
1.当我们以("%@",对象名)的格式打印对象,此时调用了对象的description方法,
对象中如果没有重写父类的description方法,则调用父类的 ,父类NSObject方法中默认打印<对象类名:对象地址>.重写则输出我们写入的信息.
- (NSString *)description{}
2.
获取类名的方法是[类名 class],打印类名时候不能直接写类名.
3.千万不能在description中使用%@和self,这代表着要调用self的description的方法,会陷入死循环.
1. [Person new] 做了3件事.
1).申请内存空间
2).给实例变量初始化
3).返回空间的首地址
2.申请的空间在内存的哪个区:
1).new的时候申请的空间在内存的堆区(程序动态分配的内存空间).
2).当new的时候内存的布局是这么样的 :
3 初始化的时候:
1).如果实例变量是基本数据类型,此时给初始化为0.
2).如果实例变量是OC字符串类型,此时给初始化null.
4.实例变量保存在堆区.
p(指针变量)存放在栈区.
对象方法保存在代码区.
5.为什么使用[p run];就可以调用方法了,如何调用的.
1).首先找到p对应的堆区的空间,然后找到_isa指针,再找到_isa指向的代码区的空间,然后到该空间找方法, |
|