SEL s2 = @selector(eat:);
[ani performSelector:s2 withObject:@"一块沾有粑粑的棒棒糖"];
[ani performSelector:@selector(eat:andFoodName:)
withObject:@"班长养的恶狗"withObject:@"一块沾有粑粑的棒棒糖"];
SEL(是一个包含地址的类型)
22)id类型:
NSObject和id类型都可以指向任何对象
NSObject会进行编译时检查(需要强制类型转换)
id不需要强制类型转换,id可以直接使用
编译器看到id类型,认为是动态类型,不在检查类型
23)多态:
父类不能访问子类方法
多态的概念:不同的对象以自己的方式响应相同名称的能力称为多态
体现出来:父类的指针指向了子类的对象
多态的条件:1)有继承关系
2)有方法重写 (子类把父类的同名方法给重写了)
多态的使用注意:
1)使用子类的方法如果父类中没有此方法则使用子类强制类型转换
类对象的获取方法:
类对象属于Class类型
1)通过实例对象来获取
Class c1 = [d class];
Class c2 = [d1 class];
2)通过类名来获取类对象
Class c3 = [Dog class];
NSLog("%p", c3);
24)构造方法:
new方法的内部会分别调用两个方法类完成3件事情:
1)使用alloc方法来分配存储空间(返回分配的对象);
2)使用init方法来对对象进行初始化;
3)返回对象的首地址
init是一个对象方法
[Person alloc] 的时候,内存已经被清0(其中的属性被0初始化)
OC构造方法,学习哪些内容:
主要学习如何重写构造方法,让对象创建成功后,就有初始的值
super指代的是父类对象
25)自定义构造方法:
1)是一个对象方法:
2)返回是id类型(instancetype)
3)方法名一定要以 initWith
-(instancetype)initWithName:(NSString *)name andAge:(int)age{...}
Person *p1 = [Person alloc] initWithName:@"张三丰"andAge: