目录
###动态绑定
在程序执行时才确定对象对象属性和需要相应的消息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| #import <Foundation/NSObject.h>
@interface A : NSObject - (void)say; @end
@implementation A - (void)say { NSLog(@"A say"); } @end
@interface B : A @end
@implementation B - (void)say { NSLog(@"B say"); } @end
int main(void) { id obj;
obj = [[A alloc] init]; [obj say];
obj = [[B alloc] init]; [obj say];
obj = [[NSObject alloc] init]; [obj say];
return 0; }
|
####多态
同一操作对于不同类的实例将产生不同的执行结果
####空指针nil
nil表示一空对象,向nil发送消息什么都不会发生
1 2 3
| id obj = nil; [obj method];
|
####重载
没什么好说的
###类对象
面向对象语言中对类有两种认识
- 类只作为类型的定义,程序运行时不作为实体存在
- 类本身也作为一个对象存在
我们将第二种定义的类的对象叫做类对象
类对象有自己的类方法和类变量,
oc 中只有类方法的概念
有些书中会将oc的类对象称为factory,类方法称为factory method
####类方法定义
+ (id) method;
####类变量
oc不支持类变量,但是可以通过在实现文件中定义
静态变量(static var) 的方法来代替
如果需要在子类中访问静态变量可以设置getter/setter