
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):
协议:
委托设计模式:
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)