iOS基础问题。。。

1.深复制和浅复制的区别

     对象拷贝的两种方式,深复制就是复制整个对象到另一个内存中,浅复制就是复制指向对象的指针,并不拷贝对象本身。

    简单的来说浅复制就是两个变量指向了同一块内存区域,深复制就是两个变量指向了不同的内存区域,内存中的类容是一样的。

2.非集合对像的copy和Mutablecopy  

  (1)可变对象的copy和mutableCopy方法都是深复制

  (2)不可变对象的copy方法是浅复制,mutableCopy方法是深复制

  (3)copy方法返回的对象是不可变对象

3.集合对像如果用copy 内部的元素是浅复制如果要深复制则:

NSSarray *array2 = [[NSSarrray alloc]initwitharray:array1 copyItem:YES];这样做的结果是内部元素都是深复制。

4.oc中属性特征

主要有assign retain copy  还有readonly,readwrite.   另外,atomic和nonatomic;以及strong,weak。

(1)readwrite是可读可写特征;需要生成getter方法和setter方法;

(2)readonly是只读特性只会生成getter方法不会生成setter方法;

(3)assign赋值特性,setter方法将传入参数赋值给实例变量;

(4)retain 表示持有特性,setter方法将传入参数先保留,再赋值,并且变量retaincount(引用计数)+1;

(5)copy 通过copy将对象复制一份,之前的对象会释放;

(6)strong 强引用,计数器+1;

(7)weak 弱引用 计数器不加一;

(8)nonatomic 非原子性;(一般使用他)

(9)atomic 原子性,确保其操作的原子性;

(10)unsafe_unretained 和weak的功能差不多

5.OC中的内存管理

每个OC对象都有自己的引用计数器,是一个整数表示对象被引用的次数,即现在有多少东西在使用这个对象。对象刚被创建时,默认计数器值为1,当计数器的值变为0时,则对象销毁。

在每个OC对象内部,都专门有4个字节的存储空间来存储引用计数器。  而判断对像是否要销毁的唯一依据的是应用计数是否为0 为0则销毁。

当对象被销毁时,系统会自动向对象发送一条dealloc消息,一般会重写dealloc方法,在这里释放相关的资源,dealloc就像是对象的“临终遗言”。一旦重写了dealloc方法就必须调用[super dealloc],并且放在代码块的最后调用(不能直接调用dealloc方法)。

一旦对象被回收了,那么他所占据的存储空间就不再可用,坚持使用会导致程序崩溃(野指针错误)。

ARC Automatic Reference Counting 自动引用计数---一般使用这个 

MRC Manual Reference Counting 手动引用计数

自动释放池。

6.kvc  kvo

kvc key value coding  键值编码

[ setvalue:  forkey:]

kvo  简单的通知模式

posted @ 2016-06-08 15:49  Toney-c  阅读(134)  评论(0编辑  收藏  举报