OC基础-Category类别 、extension类扩展(八)

OC基础-Category类别 、extension类扩展(八),第1张

category是Objective-C 2.0之后添加的语言特性,category的主要作用是为已经存在的类添加方法.

可以看下 美图技术团队 的这篇文章

优势:

(1). 减少单个文件的体积

(2). 把不同的功能分配到不同的分类里,便于管理

(3). 可以按需加载想要的分类

局限性:

(1). 无法向类中添加新的实例变量

(2). 类别中的方法名与现有方法重名, 名称冲突.(冲突时,类别有更高的优先级)

我们知道,所有的OC类和对象,在runtime层都是用struct表示的,category也不例外,在runtime层,category用结构体category_t(在objc-runtime-new.h中可以找到此定义),它包含了:

1)、类的名字(name)

2)、类(cls)

3)、category中所有给类添加的实例方法的列表(instanceMethods)

4)、category中所有添加的类方法的列表(classMethods)

5)、category实现的所有协议的列表(protocols)

6)、category中添加的所有属性(instanceProperties)

从category的定义也可以看出category的可为(可以添加实例方法,类方法,甚至可以实现协议,添加属性)和不可为(无法添加实例变量)。

平常都是使用分类来对系统的类封装一些小功能,如 NSString判空处理 等,可以看下 ibireme大神开源的这个库YYCategories ,都是针对系统的类使用分类拓展的小功能,很实用。再来看看业界闻名的空白页框架 DZNEmptyDataSet ,它就是通过对 UIScrollView 使用分类功能,非常完美、无侵入的解决了无数据时,避免白屏的尴尬,改善用户体验。

extension的别名有很多,扩展、延展、匿名分类。它就是类的一部分,在编译期和头文件里的@interface以及实现文件里的@implement一起形成一个完整的类,它伴随类的产生而产生,亦随之一起消亡。

我们平时在.m文件里使用的

声明私有属性

声明私有方法

声明私有成员变量

编译时决议

只以声明的形式存在,多数情况下寄生在宿主类的.m中

一般的私有属性写到.m文件中的类扩展中

不能为系统类添加扩展

extension 在编译期决议, category在运行期决议。

一、基础数据类型

2.数据类型转化

基础数据类型转换:容量从大到小转换为强制转换,需要加强制转换符,double –>float–>long–>int–>char/ short/Byte

二、OC运算符

逻辑运算符

自加自减运算符++ / --

三、if条件语句、swtch语句、循环语句

if (0 == count){

}else if (1 == count) {

}else{

}

switch ( expression )

{

case value1 :

...

break// 跳出整个循环语句

case value2 :

...

break

case value3 :

...

break

default:

...

break

}

for (int x = 0x<10x++){

}

int a = 0

while (a <5) {

nslog(@”%d”,a)**

if (a == 1) {

continue//跳出当次循环,输入结果0134

}

a++

}

动态类型:OC在运行时才确定对象的实际类型,id。

动态绑定:程序在执行时才确定对象调用的实际方法。

多态:一种事物的多种形态。不同类的对象可以定义共享相同的方法,

多态的条件:有继承关系、有方法的重写、父类声明变量指向子类对象。

NSNumber

NSFileHandle

复制对象

归档

NSUserDefault

KVC

KVO

NSNotification

NSPredicate谓词

类目(Category):添加新的方法,会成为原始类的一部分,类目不能添加实例变量,类目可以重写原始类的方法。

类目命名方式:类名+扩展方法。

延展(Extension):

协议:

委托设计模式:


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11461074.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-16
下一篇2023-05-16

发表评论

登录后才能评论

评论列表(0条)

    保存