****************oc加强***********************
1,内存管理范围:管理任何继承NSObject的对象,基本数据类型不需要内存管理。
2,内存管理的原则
1)谁创建,谁release
2)谁retain,谁release
阐述:
只要还有人在使用某个对象,那么这个对象就不会被回收;
只要你想使用这个对象,那么就应该让这个对象的引用计数器+1;
当你不想使用这个对象时,应该让对象的引用计数器-1;
3,set方法的内存管理
1)基本数据类型:直接赋值
2)OC对象类型:先判断是不是新传进来的对象, 对旧对象做一次release,对新对象做一次retain
4,野指针
没有初始化的指针变量 或 指向的内存空间已经被释放的指针变量
5,僵尸对象
本质是一个对象,这个对象已经被回收
6,什么是内存泄露
该回收的对象没有被回收,就产生了内存泄露
7,循环retain
两个类相互包含,就会出现无法释放的问题,解决方案:一边用retain 另一边用assign
8.import和@class的区别
1)#import是1个预处理指令. 将文件的内容拷贝到写指令的地方.
2)@class不是1个预处理指令. 不会将任何文件的内容拷贝进来.仅仅是告诉编译器这是1个类.
9,autorelease是什么?
简单来说,就是一个池子,当我们的这个池子释放的时候,它会将它里面的所有对象做一次release操作
10,ARC的判断准则: 只要没有强指针指向对象,对象就会被立即释放
11,强指针和弱指针
在ARC环境下,对于OC对象
用__strong修饰的指针叫强指针(默认)
用__weak修饰的指针叫弱指针
12,ARC机制下的循环引用:一端使用strong 一端使用weak
13,@proprety参数
1)原子性:atmoic(原子性)noatmoic(非原子性)
2)读写属性:readwrite和readonly
3)set方法的处理:assign(修饰基本数据类型)retain(用来修饰OC对象)
以上是MRC的情况下 ARC的情况下多两个(strong(强指针)weak(弱指针))
14,分类的作用:在不改变原有类的基础上,为一个已经存在的类扩充方法
15,分类和继承:分类用来添加新的方法不可以改变原方法,继承可以添加改变原方法并可以增加属性
16,延展(Extension)概念
延展可以认为是1个匿名的分类,它只有声明没有实现.和本类共享1个实现.
17,什么是非正式协议
第一种答法:给系统的类增加的分类叫非正式协议
第二种答法:凡是给NSObject或者其子类Foundation框架中的类增加的类别都是非正式协议.
18,block概念:block是一个类型,这个类型可以定义变量,这个变量是用来存储一段代码的
19,block能不能修改外面的局部变量
默认情况下,block 内部不能修改外面的局部变量
给局部变量加上_block,这个局部变量就可以在block内部改变
20,block与函数的异同
1.相同点
都可以封装成一段代码
2.不同点
1>block是一种数据类型,函数是一种不是,函数是一段具有特定功能的代码段
所以有block类型的变量,没有函数类型的变量
2>block可以直接做参数传递,函数不能
21,协议的概念
协议: 一些方法的声明,写在.h文件中,供其他的类去遵守.
22,代理设计模式的场合:
* 当对象A发生了一些行为,想告知对象B (让对象B成为对象A的代理对象)
* 对象B想监听对象A的一些行为 (让对象B成为对象A的代理对象)
* 当对象A无法处理某些行为的时候,想让对象B帮忙处理 (让对象B成为对象A的代理对象)
1)通知的场合
* Baby发生了一些行为,想告知保姆
2)监听器的场合
* 保姆想监听Baby的一些行为
3)有些事情,不想自己处理,想交给别人处理
* Baby发生了一些行为, 但是自己不会处理, 可以交给保姆处理
23,Foundation框架
Foundation框架是系统提供的一些基本的类的集合,是OC中最基础的类
|
|