OC
OC知识点
OC的字符串
- 1.类:是结构体的升级,用于定义变量
- - 与结构体的区别
- 关键字
- 成员变量前加下划线
- 有函数
- 类的变量只能定义在堆区,不能定义在栈区,且不需要释放
- 类中的方法被调用时需要使用中括号
- 类中的属性(成员变量)不能在类外被操作,需要使用setter赋值、getter访问
- 2.对象
- 对象是一种特殊的变量
- 对象与变量的区别是,对象可以调用类中的方法(函数)
- 对象也被称为实例。用类定义一个对象,又被称为类的实例化
- 3.分割文件,类的声明在.h文件中,类的方法(函数)实现在.m文件中
类的对象
- 1.定义带有多个形参的方法
- 2.访问权限
- - 属性的访问权限(4种)
@public、@package、@protected、@private
- - 方法的访问权限(2种)
私有方法、公有方法
- 3.属性:由关键字自动生成的成员变量的声明+setter+getter
初始化
- 无参初始化
- init是从父类NSObject中继承的,所以不需要在.h文件中声明
- 带参初始化
- 方法名的格式为:-(id)initWith......
- instancetype:实例(对象)的数据类型
- id
- id是万能指针(数据类型),类似于void*
- 与void*的区别
id定义指针时,不需要加*
id类型的指针,不能指向基本数据类型(包括结构体)的变量,只能指向OC类的对象,是一个受限的万能指针
- self
- self是一个指针(变量)
- 只能用在类中方法的函数体中(局部指针变量)
- 指向调用该方法的对象
- 可以在类中的一个方法函数体中调用类中其他方法,要用self调用,包括私有方法
- super
- super也是一个指针
- 该指针指向所在类的父类数据
实例方法
- 以减号开头的方法
- 实例方法用对象来调用
- 在实例方法中self指向调用该方法的对象
类方法
- 以加号开头的方法
- 类方法用类名来调用
- 在类方法中不能使用self
工厂方法
- 工厂方法是类方法的一种应用
- 工厂方法用于生成对象
- 无参工厂方法
- 带参工厂方法
单例模式
dealloc
组合与聚合
- 是指两个(或两个以上)类之间的一种关系
- 是(一个)整体类与(多个)部分类之间的关系
- 组合是两个(以上)类的强关系,即同生共死
- 聚合是两个(以上)类的弱关系,非同生共死
面向对象的三大特征
继承与派生
- 继承也是两个类之间的一种关系,是父类与子类的关系,是“is a”的关系,是将父类中的所有属性和方法直接在子类中复用
- 派生:在子类中添加自己的属性和方法
- 重写:在子类中对父类继承过来的方法重新定义函数体
- 隐藏:在子类重写父类的方法之后,用子类的对象调用该方法时,优先调用子类重写的方法
MRC
- 淘汰的技术
- 引用计数(RC)是指alloc自动分配的一块存储空间,用于记录持有该空间的指针个数
- 使用retainCount查看RC的值
- 使用retain使RC加1
- 使用release使RC减1
减1后结果为0,则先调用dealloc,然后释放RC所在的对象空间
减1后结果不为0,则release直接返回:
if(RC-1==0)
{
free(p);
}
- retain做property的参数时,可以再set方法中自动添加持有方法(retain),使RC加1。注意:一旦添加该参数,必须在dealloc中使用RC减1
自动释放池
- 在ARC中是已经过时的技术
- 是一个集合,其中有许多对象
- 当自动释放池的作用域结束时,池中的所有对象自动被释放
- 自动释放池与工厂方法
- 自动释放池的嵌套
多态
- 一个对外接口,多个内在实现
- 在OC程序中,体现为父类的指针可以指向子类的对象,从而调用子类中重写的父类方法
- 多态的使用形式
-- 函数参数多态
-- 数组多态
-- 返回值多态
协议
- 是一种要求,或是一种规则
- 对应程序来讲,是只声明函数名,不实现,不提供函数体
- 协议必须被某个类采纳,且在该类中给出协议中方法的函数体
- 对于采纳协议的类,可以和其他类一样使用
- 协议可以被继承,包括多个父协议
- 协议可以多重采纳
- 使用形式
-- 数组
-- 函数参数形参
-- 函数返回值
分类
- 将一个复杂的类分成若干个模块,其中每个模块被称为一个分类
- 分类的作用是降低耦合度
- 分类的语法
- 在主函数中,只能看到一个主类,不会看到分类
- 分类中不能定义成员变量或属性
- 可以给没有源代码的类添加分类
扩展
*单独写在一个.h文件中,扩展中的成员变量是私有的,属性和方法是公有的
*将扩展写在主类的.m文件中,此时扩展中的成员变量和属性、方法都是私有的
有没有.m文件,(分类有,扩展没有)
有没有成员变量或属性,(分类没有,扩展有)
- 与协议的区别:协议可以被任何类采纳,但扩展只属于主类
ARC
- iOS5.0开始使用到iOS7.0强制使用
- 不允许程序员调用retain、release、dealloc、autorelease,而由编译器自动添加其调用的语句
- ARC中添加的新关键字
__strong 强引用(默认方式)
__weak 弱引用
__unsafe_unretained
__autoreleasing
- ARC与MRC混编 Edit->convert->To Objective-C ARC…