黑马程序员——Objective-C——Category、SEL
来源:互联网 发布:手机兼职淘宝客服 编辑:程序博客网 时间:2024/06/08 16:59
———Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ———
一、分类(Category)
1>作用:在不改变原来类的前提下,给类扩充一些方法
2>格式:
@interface 类名 (分类名称)// 方法的声明@end@implementation 类名(分类名称)// 方法的实现@end
3>使用注意
a. 只能添加方法,不能添加成员变量,但是可以访问原类的成员变量
b. 如果重写原始类的方法实现,但是这样做会导致原始类的方法失效
c. 如果多个分类中实现了同一个方法,那么调用时会调用最后一个参与编译的分类中的方法
4>实例代码
// 只写了主要代码,原类代码并没有#import “Person.h” // 注意:这里要引入原类的头文件@interface Person (studyPerson)- (void)study@end@implementation Person (studyPerson)- (void)study{NSLog(@“%d的人好好学习!”,_age); // 假设_age是元类的成员变量}@end// main.m中#import “Person.h”#import “person+studyPerson.h” // 注意:原类和分类的头文件都要导入int main(){Person *person = [[Person alloc] init];[person study]; // 调用分类的方法return 0;}
二、SEL
1>总结:
a. 每个类的方法列表都存储在类对象中
b. 每个方法都有一个与之对应的SEL类型的数据
c. 根据一个SEL数据就可以找到方法的地址,进而调用方法
d. 每个方法的内部都有一个_cmd,代表着当前方法。
e. 对象方法中不可以这样写:[selfperformSelector:_cmd]; // 会引发死循环
2>方法的寻找过程:
a. 首先把方法名包装成SEL类型的数据;
b. 根据SEL数据找到对应的方法地址;
c. 根据方法地址调用相应的方法。
SEL其实是对方法的一种包装,将方法包装成一个SEL类型的数据,去寻找对应的方法地址,找到方法地址后就可以调用方法。这些都是运行时特性,发消息就是发送SEL,然后根据SEL找到地址,调用方法。
3>代码
// 把方法转换成SEL数据SEL s = @selector (test); // 把字符串转换成SEL数据SEL s = NSSelectorFromString(@”test”); // 将SEL数据转换为NSString对象NSString *str = NSStringFromSelector(@selector(test));// 使用SEL数据调用test方法[person performSelector:@selector(test)];
0 0
- 黑马程序员——Objective-C——Category、SEL
- 黑马程序员——Objective--C笔记Category、block
- Objective-C—构造方法、分类Category、类的深入研究、description方法、SEL
- 黑马程序员——Objective-C中的Category(类别)——黑马 IOS 技术博客
- 黑马程序员——OC基础——category、description和SEL
- 黑马程序员——OC基础---核心语法(id,构造方法,Category,description,SEL)
- Objective-C——Category
- 黑马程序员----objective-C description NSLog SEL
- 黑马程序员——Objective-C分类 (category)和扩展(Extension)——黑马 ios 技术博客
- 黑马程序员——初识Objective-C
- 黑马程序员--Objective-C——ARC
- 黑马程序员—学objective-c
- 黑马程序员—Objective-C内存管理
- 黑马程序员------[Objective-C]分类-Category
- 黑马程序员---Objective-C 分类-Category
- Objective-C基础-——核心语法-description和sel
- Objective-C——类别(Category)详解
- Objective-C语言——Category类目
- 计算机科学类优秀书籍推荐 UNIX&Operating System (操作系统)
- 搜索二叉树实现
- 关于单例的几点注意事项
- mininet的安装
- jboss4.2.1下部署集深V5
- 黑马程序员——Objective-C——Category、SEL
- 就你不知道之:提高编译速度
- PHP学习笔记---- 与MySQL的搭建
- Spring3.x企业应用开发_IOC
- MySQL各版本的区别
- 【leetcode 分治法】Find Peak Element
- HDU4970 Killing Monsters 【数组标记】
- 背包九讲 算法摘记
- UVA11636 - Hello World!