OC总结

OC课程总结
一、类和对象
1.类是具有相同特征和行为的事物的抽象,对象是类的具体化,类是对象的类型。
2.类和对象是面向对象编程的核心,分析问题组成的对象协调对象间的联系和通信,解决问题。
3.解决问题的时候是解决每个步骤的行为(方法),而不是可以去完成每个步骤。
4.面向对象编程具有良好的可拓展性和可重用行。
5.面向对象的三大特征:封装,继承,多态(多态是指 父类指针指向子类对象)
6.OC中类的定义:接口文件.h,实现文件.m,创建对象:分配内存,初始化对象。
7.Objective-C不用”函数调用",而用互相传递讯息. 一个完整的类分为interface和implementation两块
8.OC中BOOL类型的变量只有 YES 和NO

二、实例变量可见度
1.@public公有的,@provate私有的,@protected受保护的(默认)
2.方法:实例方法:(- 开头,对象调用);类方法(+开头,类调用)(类方法中 不能够直接使用属性或者实例变量 需要开辟一个新对象后 在进行使用)
3.方法名:删除类型标识,返回类型,参数类型,参数名 空格
4.set方法,无返回值值,用来赋值;get方法,有返回值,用来取值
5.复合:一个类中包含其它类的对象
6.#import防止重复编译,@class防止嵌套循环导入

三、继承
1.继承只能单向继承,不能相互继承,子类能够继承父类所有的特征和行为。
2.OC中只支持单继承,不能多继承,OC中实现多继承可以通过协议和复合来实现。
3.self 谁调用就是谁 也可以表示本类对象的指针,可以调用本类中的方法。
4.super编译指令器,可以调用由父类继承来的方法 super是一个指令 而不是对象。

四、数组和字典
NSString,NSMUtableString,NSArray,NSMUtableArray,NSDIctionary,NSMutableDictionary NSSet NSMutableSet NSCountedSet NSNUmber NSValue

不可变对象 创建之后 不可以改变 所有的改变都相当于指针的重新指向 改变内容的API方法都是有返回值的
可变对象 创建之后 可以改变 所有的改变都是改的原有的对象 改变内容的API方法都是没有返回值的
容器只能够装载对象类型

数组是有序存在的
字典是无序存在的 字典的key是唯一的
集合是无序存在的 集合中的元素也是唯一的
多查阅API及文档,掌握基本初始化方法,掌握forin快速遍历
forin内存不能直接操作 forin遍历的容器 但是可以 操作其它容器

字符串
长度 相同 判断开头 判断结尾 获取子字符串(三个)拼接 大写 小写 首字母大写其他小写 替换(两个)

数组
数组元素个数 添加元素 删除元素 根据下标删除元素 删除所有元素 删除首个元素 删除最后元素 取某个下标元素 取首元素 取最后一个元素
删除数组倒着删除

字典
元素个数 添加建值对 根据键值取值value值 根据键值删除value值 删除所有元素 forin遍历的默认是字典的key值

NSRange 是一个结构体 loction位置 length长度
NSNumber 把数值类型 转化成对象类型
NSValue 把结构体类型 转化成对象类型
选中类或者方法
苹果键 + 鼠标左键 = 看接口头文件声明
option + 鼠标左键 = 看苹果官方文档

五、block语法
1.四种形式
有返回值有参数
有返回值无参数
无返回值有参数
无返回值无参数
2.block与全局变量 局部变量 静态变量之间的关系
block外定义的局部变量 block内只能够访问 不能够修改 如果想要修改 需要用__block修饰
block内定义的局部变量 block内能访问 能修改 作用域只在block内
block对全局变量和静态变量 在block内都可以访问和修改
静态变量只初始化一次 (带 static的那行代码)
3.__block关键字的用处,typedef block 其别名的用法,block排序 NSCOmparesionResult 只有返回值为1的情况下 才会交换位置
4.block自带的obj 可以进行类型强制转化

六、类的拓展
1.类目:相当于扩展类的方法,可以在扩展类中写属性 但是不能扩展实例变量 属于公有的
2.延展:类的私有方法,属于匿名类目,可以扩展类的属性和实例变量 属于私有的
3.协议:扩展类的方法,但是必须遵守协议 协议通常和代理结合使用
协议分为非正式协议和正式协议 有可选择性执行协议 和 必须执行协议 默认的是必须执行的协议
3.OC中的代理属性 需要声明成assigin 防止 代理类引用计数+1 最后释放不掉
KVC ig
对象类型 可以直接赋值为空 输出的时候 就是(null)
赋值的时候 是什么类型 取出来的时候 就是什么类型 需要用到的话 在进行类型转化

非对象类型 赋值空值 会导致崩溃
如果赋值控制 并且不崩溃 需要实现- (void)setNilValueForKey:(NSString *)key 方法(空实现即可)

给一个没有与key对应的属性 或者 实例变量赋值 会导致崩溃 如果不让程序崩溃 需要实现此方法

  • (void)setValue:(id)value forUndefinedKey:(NSString *)key

传入一个字典 把所有key值对应的value值 给对应的属性
setValuesForKeysWithDictionary:

七、属性
1.读写:readwrite,readonly
2.原子性和非原子性:atomic,nonatimic
3.语意:assign,copy,retain
4.getter和setter在重写属性的时候使用,不属于读写关键字的范围

内存管理
一、定义属性的时候需要使用的关键字和定义格式

  1. 对象类型:@property(notoimic,retain)

    NSString和NSmutableString类型不要用retain,要用copy

  2. NSString和NSmutableString类型:@property(notomic,copy)
  3. 基本数据类型:@preperty(notomic, assgin)
  4. 在.h里定义完属性或者实例变量后,所有的对象类型(也就是非基本数据类型),都需要在.m里实现系统自带的dealloc方法
    -(void)dealloc
    {
    [_xxx release];
    [super dealooc];
    }

属性会根据不同的语意设置 自动生成set get方法 本质上还是在调用set get方法

二、内存管理关键字

  1. alloc 对内存初始化 引用计数器由0变1的过程
  2. retain 引用计数器+1 看有几个对象同时在用这块内存地址
  3. copy 分为伪拷贝 深拷贝和浅拷贝,也是引用计数器+1

    伪拷贝:并没有实现真正的拷贝 两个对象自身的地址是相同的
    浅拷贝:对象的地址是两个 内容的地址是同一个
    深拷贝:对象的地址是两个 内容的地址也是两个
    不可变对象 = 【不可变对象 copy】 伪拷贝
    不可变对象 = 【可变对象 copy】浅拷贝
    可变对象 = 【可变对象 copy】浅拷贝 (这种情况 接收的可变对象 会变成不可变对象 不能够修改)
    数组 字典 字符串 同理
    容器添加对象 对象的引用计数会+1
    对象的引用计数改变 不影响 容器的引用计数
    容器的引用计数改变 不影响 对象的应用计数
    只有当容器的引用计数为0的时候 才会对 对象的引用计数有影响

  4. release 引用计数器—1,当一个对象不在使用时,需要释放该快内存,和alloc相对应
  5. autorelease 也是引用计数器—1,只不过是延迟释放,autorelease池是一块延迟释放池,当程序走出延迟释放池的时候,该块内存才会被释放

6.autorelease 自动释放池
所有的autorelease对象都放在自动释放池中,由自动释放池做统一管理。(出了自动释放池 会立引用计数-1)
7.dealloc:回收已经开辟的空间 在dealloc中 回收所有对象类型的属性 最后在写 super dealloc 永远不要主动的手动调用 super dealloc

总结:
所有对象类型属性 用retain修饰 (除了NSString * NSMutableString)
所有非对象类型属性 用assign修饰 代理同样也用assign修饰
字符串 NSString * NSMuttableString *用copy修饰
dealloc 中 所有对象类型的属性 全部需要释放 最后写super dealloc
虽然字符串类 比较特殊 是一个类簇 但是在OC中 只要是在堆区开辟的对象 每一个对象都是有引用计数的概念

转载于:https://www.cnblogs.com/ruoyu1128/p/5055063.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值