#program mark - 多态
"问题:说一说什么是多态
1>同一种行为的事物有不同的表现形式,比如每个人的打招呼方式都不同
2>代码中的多态:子类重写了父类的方法,通过父类的指针指向子类对象调用方法,执行的是重写之后的方法
#program mark - description方法
"强调
1.description方法是一个对象方法,这个方法来自NSObject类
-(NSString *)description;
这个方法的返回值是一个字符串 @"<对象对应的类名:对象的地址>"
2.%@打印对象原理
1>格式
NSLog(@"%@",指向对象的指针);
2>原理
NSLog(@"%@",[指向对象的指针 description]);
NSLog(@"%@",@"<对象对应的类名:对象的地址>");
NSLog(@"<对象对应的类名:对象的地址>");
#program mark - 继承的本质
在堆区开辟空间创建对象,这个对象拥有其父类及其父类的父类的所有属性,没有方法
#program mark - 点语法
"强调
1.点语法的本质
点语法的本质是编译器特性,就是编译器在编译代码的时候把点语法调用的方法的格式转换成普通调用方法的格式
1>在赋值符号左边使用点语法
对象名.xxx = 值 ---> [对象名 setXxx:值]
2>右边
变量 = 对象名.xxx ---> [对象名 xxx];
2.由于点语法是编译器特性,所以可以欺骗编译器
#program mark - @property
1.xcode4.4开始@property的威力大大增强,完全取代了之前@property + @synthesize的所有功能
//4.3查老师笔记
只需要在类的.h中写上一句代码 @property + 类型 + 属性名
1>会在类的.h中生成xxx属性的标准的setter/getter的声明
2>自动在类的.m中生成一个_xxx的属性
3>自动的在类的.m中生成_xxx属性的setter/getter的实现
#program - mark 任意指针指向任意对象
"弱语言 与 强语言
1.强语言:Java C#..
编译器在检查语法的时候,非常严格,一点错误都不就报错
2.弱语言:OC
编译器对源代码的容错性较强,一些明显的逻辑错误,编译只是警告,不报错.
优点:自由,灵活
弱语言的缺点
如果有逻辑错误,只是编译报警告.只有程序运行起来才会把错误暴露出来,导致程序崩溃
"编译检查 与 运行检查
1.什么是编译检查?
编译检查就是程序运行之前的检查,就看这个指针定义的类型是否拥有某个方法/属性
2.什么是运行检查?
运行检查是程序运行过程中的检查.检查的是指针指向的对象是否拥有某个方法/属性
#program mark - NSObiect万能指针
1.NSObject类型的指针可以指向任意对象,因为NSObject类是所有类的父类
2.NSObject类型的指针指向的是任意"对象",不是所有数据类型
3.NSObject*万能指针.和编译检查/运行检查的关系//笔记
"结论:对象调用的方法的过程,本质是给指针指向的对象发送消息,指针指向的是哪个对象,就调用哪个对象的方法
#program mark - id指针
1.id指针是什么?
1>
id就是一个别名,是objc_object类型的结构体变量的指针的别名
2>
objc_object是什么?代表了一个类创建的对象
/// Represents an instance of a class.
struct objc_object {
Class isa OBJC_ISA_AVAILABILITY;
};
3>
记住一句话 id类型就是NSObject *类型,也是万能指针,也能指向任意的OC对象
2.id和NSObject *的区别
1>id类型内部是添加了*的,所以定义id类型的指针的时候不需要加*
2>编译器对于id类型的指针,不做编译检查,但是对NSObject *做编译检查
3>id指针无法调用点语法
|
|