OC类的分类和类的加载过程
来源:互联网 发布:linux 内存信息 编辑:程序博客网 时间:2024/06/04 16:56
1.分类的使用
在开发过程中,如需要给某个类添加一些方法而不改变原来类,可以通过分类来实现,利用分类可以给原有类添加一些后来需要的一些功能,也可以达到共同开发一个类,实现项目合作。
分类的作用:再不改变原来类的基础上,可以为类增加一些方法,原来类可以是系统自带的类
分类的命名规则:可以随便命名,一般分类名要体现出分类的功能,这样让别人易懂。
例如:给类NSString添加一个计算字符串中阿拉伯数字个数的方法。
1.首先建立一个分类
2.原类选择NSString
3.在分类中写所需方法
方法的声明:
#import <Foundation/Foundation.h>@interface NSString (NumberCount)// 所需添加的方法- (int)NumberCountOfNSString;@end
方法的实现:
#import "NSString+NumberCount.h"@implementation NSString (NumberCount)- (int)NumberCountOfNSString{ int count = 0; // 记录阿拉伯数字的个数 for (int i = 0;i <self.length ;i++) { //遍历字符串 unichar c = [self characterAtIndex:i]; if (c >='0' && c <= '9') { count++; } } return count;}@endmain()函数:
int main(){ int c2 = [@"123qwer456dfsdfa23" NumberCountOfNSString]; NSLog(@"%d",c2); return 0;}
分类使用注意:
1.分类只能增加方法,不能增加成员变量
2.分类方法实现中可以访问原来类中的声明的成员变量
3.分类可以重新实现原来类中的方法,但会覆盖掉原来的方法,会导致原来的方法没法在使用
4.方法调用的优先级:分类(最后编译的分类)--->原来类--->父类
2.类的加载过程
类加载的本质
1.当程序启动时,就会加载项目中所有的类和分类。而且加载后会调用每个类 和分类的+loa方法。只会调用一次
2.当第一次使用某个类时,就会调用当前类的+initialize方法
3.先加载父类,在加载子类(先调用父类的+load,在调用子类的+load方法)先初始化父类,再初始化子类(先调用父类的+initialize方法,再调用子类的+initialize方法)
创建一个Person类,在创建Student类继承Person类,在创建Student一个分类Student+Study,如:
父类Person方法如下:
#import "Person.h"@implementation Person+ (void)load{ NSLog(@"Person--load");}+(void)initialize{ NSLog(@"Person--initialize");}@end子类和分类一样写
输出结果:
Person--load Student--load 分类--load可以看出,最先加载父类,其次加载子类,最后加载子类的分类。
当初始化父类对象时:
int main(){ Person *p = [[Person alloc] init]; return 0;}输出结果;
Person--load Student--load 分类--load Person--initialize子类和子类分类没有初始化
当初始化子类时:
int main(){ Student *p = [[Student alloc] init]; return 0;}输出结果:
Person--load Student--load 分类--load Person--initialize 分类--initialize父类先初始化,其次分类初始化
0 0
- OC类的分类和类的加载过程
- OC语言类的深入和分类
- OC语言类的深入和分类
- OC语言类的深入和分类
- OC语言类的深入和分类
- OC语言类的深入和分类
- OC语言类的深入和分类
- OC 类的加载和初始化
- 12、黑马程序员-OC类的深入和分类
- OC核心语法(3)分类和类的本质
- OC语言11-类的深入和分类
- OC的分类和协议
- 类加载和对象的初始化过程
- JVM > 类加载的时机和过程
- java类和对象的加载过程
- 类的加载过程
- 类的加载过程
- 类的加载过程
- 2012 蓝桥杯 预赛
- (2)Java开发图像裁剪系统
- 黑马程序员——IO(字节流)
- Java 线程池的原理与实现
- Python while 1 和 while True 速度比较
- OC类的分类和类的加载过程
- LeetCode Number of Islands Java版本
- php 基础语法
- unity3d中用四元数 Quaternion来对一个坐标点进行旋转的初步体会
- Python %s和%r的区别
- 学习历程
- 关于在CMD中数据库操作中文乱码问题
- iOS开发证书以及打包问题
- 在RAC中用NID修改数据库名称