2.24

1.简述OC中内存管理机制。与retain配对使用的方法是dealloc还是release,为什么?需要与alloc配对使用的方法是dealloc还是release,为什么?readwrite,readonly,assign,retain,copy,nonatomic 、atomic、strong、weak属性的作用?

oc中的内存管理机制:使用一种叫做引用计数的机制来管理内存中的对象。OC中每个对象都对应着他的引用计数,引用计数可以理解为一个整数计数器,当使用alloc方法创建对象时,引用计数器会自动设置引用计数为1,之后当你向对象发送retain消息时,引用计数+1,当你发送release消息时,引用计数-1,当引用计数为0时,�对象会释放自己所占有的内存。

retain(引用计数器+1)->release(引用计数器-1)

alloc(创建内存空间)->dealloc(释放内存空间)

readwrite 读写 (表示既有setter 也有getter) 默认
readonly 只读 (表示只有getter 没有setter)

assign 基础数据类型 不更改引用计数
copy 拷贝一个相同的对象,但是地址不同,引用计数+1

原子性:

nonatomic :不考虑线程安全
atomic: 线程操作安全(默认)

strong:在ARC的环境下,作用和MRC环境下的retain一样,引用计数器+1 (默认)
weak:在ARC的环境下,作用和MRC环境下的assign一样,weak指向的内存区域被释放掉后,自动nil化,防止野指针泄露

2、类变量中@protected、@private、@public、@package的声明各有什么定义?

@private:作用范围只能作用在自身类
@protected:作用范围在自身类和继承它的子类(默认)
@public:作用范围最大,可以在任何类被访问
@package:这个类,常用于框架类的实例变量,同一包内能用,跨包就不能用

3、线程是什么?进程是什么?二者有什么区别和联系?

一个程序运行,至少有一个进程,一个进程内,至少有一个线程。

进程: 一个程序的一个运行,在执行过程中拥有独立的内存单元,而多个线程共享这个内存单元。

线程:线程是指进程内的一个内存单元。

联系:线程是进程的基本组成单位。

区别:

  • 调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位。

  • 并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可以并发执行。

  • 拥有资源: 进程是拥有资源的一个独立单位,而线程能访问隶属于这个进程的资源。

  • 系统开销: 在创建和撤销进程时,系统都要为之分配和回收资源,导致系统的开销,明显大于创建和撤销线程时的开销。

4、谈谈你对多线程的理解?iOS中有几种实现多线程的方法?

好处:

  • 使用线程可以把程序中运行时间长的任务,放到后台去执行。
  • 可以使用户界面更加吸引人,比如点击事件之后需要等待,可以弹出进度条来显示处理任务的进度。
  • 程序的运行速度可能会加快。
  • 在一些需要等待的任务上,线程就比较有优势。比如:用户输入,文字读写,网络加载等。

缺点:

  • 如果有大量的线程,可能会影响性能,因为系统需要在它们之间切换。
  • 更多的线程就需要有更多的内存空间。
  • 线程的中止,需要考虑其对程序运行的影响。
  • 通常块模型数据是在多个线程间共享的,需要防止线程死锁的情况发生。

实现多线程的方法:
NSThread
NSOperation
GCD
NSObject类方法

5、线程同步和异步的区别?iOS中如何实现多线程的同步?

异步:举个例子就是播放电影,声音和画面是一起同步播放的。
同步:举个例子就是排队买东西,结账的时候必须前一个人付款结束才能轮到你。

实现多线程的同步:
NSOperationQueue、NSConditionLock。

6、获取一台设备唯一标示的方法有哪些?
  • UDID (unique device identifier)
  • UUID (universally unique identifier)
  • 广告标示符
  • Vendor
  • Open UDID
  • MAC Adress(iOS7 之后弃用)

iOS7之后使用keyChain(钥匙串)

7、iOS中可以使用多继承么?如果没有,可以用其他方式实现么?请简述其过程

�Objective-C语言中不支持多继承,但是可以用类目protocol的方法来实现扩展原有类中的方法

9、栈和堆的区别

堆区的内存需要程序员手动释放
而栈区的内存是系统自动释放的

10、iOS本地数据存储有哪几种方式
  • NSKeyedArchive 归档
  • Write写入 Plist文件
  • SQLite3 数据库
  • CoreData

你可能感兴趣的:(2.24)