【选择器】
一.认识选择器(Selector)
【注】选择器是一个变量类型
SEL
【注】SEL的变量装消息 类似于函数指针
【见day5-选择器-1】
SEL sel = @selector(crash);
[man performSelector:sel];
[man performSelector:@selector(setName:) withObject:@"Tom"];
【注】performSelector:最多支持两个参数
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
#pragma clang diagnostic pop
//在ARC(自动内存管理)的条件下,使用选择器,很可能会报警
//可照如上方式去除报警
SEL sel = @selector(run);
//这个方法用于编译时就能确定调用的方法
SEL sel = NSSelectorFromString(@"run");
//这个方法用于运行时确定调用的方法
二.选择器的作用
【注】 1.选择器支持了iOS开发中,控件的事件响应机制。
2.选择器可以令一个方法实现不同功能,增加代码复用度。
3.用于方法的回调。
三.Class
【注】Class也是类型,装类的类型。
Class cls = [Dog class];
//NSObject自带类方法class,将当前类转成Class类型。
Class cls = [Dog class];
id dog = [[cls alloc] init];
//Class变量,也能创建对象。
BOOL ret = [dog isKindOfClass:[Dog class]];
//判断一个对象是否属于一个类
Class cls2 = NSClassFromString(@"Dog");
//Class变量也可以在运行时(runtime)赋值。
【继承】
【注】面向对象语言的三大特性,继承性,封装性,多态性。
【注】这里说的继承,指集合的包含关系,即父类和子类的关系
一.认识继承
(一)从生活逻辑的角度
父类 生物 外星人 超级英雄
子类 动物 变形金刚 变种人
父类 动物 变形金刚 变种人
子类 人类 汽车人 欧米伽级变种人
类 人类 汽车人 欧米伽级变种人
对象 我 大黄蜂 凤凰女
【注】父子类的各种称呼
父类 parentClass 超类 supperClass 基类
子类 childClass 子类 subClass 派生类
【注】【继承】也可被称作【派生】。父类拥有的属性和方法,子类直接获得,这个过程叫做继承。子类在父类基础上,衍生出了自己独有的属性和方法,称为派生。继承和派生是描述同一事物的两种侧重。
(二)从编写代码的角度
【见继承Demo】
@interface Father : NSObject
{
int a;
int b;
int c;
}
@property NSString * name;
- (void)run;
- (void)jump;
@end
@interface Son : Father
//通过:建立继承关系 继承到父类的字段,属性和消息
//但是子类无法继承到父类未声明的方法
//子类也可以派生出自己独有的字段,属性和消息
{
int d;
}
@property NSString * ID;
- (void)swim;
@end
【重写】有时候从父类继承到的方法,并不适合子类,子类可以重写这个方法。
【重写是多态的一种,多态就是同一个声明不同的实现】
【注】很多时候,子类的方法只需要在父类的同名方法中增补些内容。可以通过关键字【supper】调用父类的方法,再增添子类独有的内容。
//重写父类的jump方法,重写方法,不用声明
//重写的方法会覆盖掉父类的方法
- (void)jump
{
NSLog(@"I can jump 1.8m!");
}
//很多时候,重写父类的方法,只是在父类的功能上添枝加叶。
- (void)showSelf
{
//先调用父类的showSelf,再加上自己的功能
[super showSelf];
NSLog(@"%@", self.ID);
}
一.认识选择器(Selector)
【注】选择器是一个变量类型
SEL
【注】SEL的变量装消息 类似于函数指针
【见day5-选择器-1】
SEL sel = @selector(crash);
[man performSelector:sel];
[man performSelector:@selector(setName:) withObject:@"Tom"];
【注】performSelector:最多支持两个参数
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
#pragma clang diagnostic pop
//在ARC(自动内存管理)的条件下,使用选择器,很可能会报警
//可照如上方式去除报警
SEL sel = @selector(run);
//这个方法用于编译时就能确定调用的方法
SEL sel = NSSelectorFromString(@"run");
//这个方法用于运行时确定调用的方法
二.选择器的作用
【注】 1.选择器支持了iOS开发中,控件的事件响应机制。
2.选择器可以令一个方法实现不同功能,增加代码复用度。
3.用于方法的回调。
三.Class
【注】Class也是类型,装类的类型。
Class cls = [Dog class];
//NSObject自带类方法class,将当前类转成Class类型。
Class cls = [Dog class];
id dog = [[cls alloc] init];
//Class变量,也能创建对象。
BOOL ret = [dog isKindOfClass:[Dog class]];
//判断一个对象是否属于一个类
Class cls2 = NSClassFromString(@"Dog");
//Class变量也可以在运行时(runtime)赋值。
【继承】
【注】面向对象语言的三大特性,继承性,封装性,多态性。
【注】这里说的继承,指集合的包含关系,即父类和子类的关系
一.认识继承
(一)从生活逻辑的角度
父类 生物 外星人 超级英雄
子类 动物 变形金刚 变种人
父类 动物 变形金刚 变种人
子类 人类 汽车人 欧米伽级变种人
类 人类 汽车人 欧米伽级变种人
对象 我 大黄蜂 凤凰女
【注】父子类的各种称呼
父类 parentClass 超类 supperClass 基类
子类 childClass 子类 subClass 派生类
【注】【继承】也可被称作【派生】。父类拥有的属性和方法,子类直接获得,这个过程叫做继承。子类在父类基础上,衍生出了自己独有的属性和方法,称为派生。继承和派生是描述同一事物的两种侧重。
(二)从编写代码的角度
【见继承Demo】
@interface Father : NSObject
{
int a;
int b;
int c;
}
@property NSString * name;
- (void)run;
- (void)jump;
@end
@interface Son : Father
//通过:建立继承关系 继承到父类的字段,属性和消息
//但是子类无法继承到父类未声明的方法
//子类也可以派生出自己独有的字段,属性和消息
{
int d;
}
@property NSString * ID;
- (void)swim;
@end
【重写】有时候从父类继承到的方法,并不适合子类,子类可以重写这个方法。
【重写是多态的一种,多态就是同一个声明不同的实现】
【注】很多时候,子类的方法只需要在父类的同名方法中增补些内容。可以通过关键字【supper】调用父类的方法,再增添子类独有的内容。
//重写父类的jump方法,重写方法,不用声明
//重写的方法会覆盖掉父类的方法
- (void)jump
{
NSLog(@"I can jump 1.8m!");
}
//很多时候,重写父类的方法,只是在父类的功能上添枝加叶。
- (void)showSelf
{
//先调用父类的showSelf,再加上自己的功能
[super showSelf];
NSLog(@"%@", self.ID);
}