基础知识

1.iOS中堆和栈的区别

管理方式:

栈是由系统编译器自动管理;堆是由开发人员手动管理,控制其释放,不及时回收易产生内存泄漏。

分配方式:

栈有两种分配方式:静态分配和动态分配。静态分配是编译器完成如局部变量的分配。动态分配也是由编译器进行释放,无需开发人员手动管理。

堆是动态分配和回收内存的,无静态方式分配。

碎片问题:

栈是一块连续的内存区域,是先进后出的队列,没有碎片;

堆是不连续的内存区域,频繁创建和释放会造成内存空间的不连续,造成大量碎片,使程序效率降低。

2.iOS中线程和进程的区别

一个程序至少有一个进程,一个进程至少有一个线程;

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

线程:线程是指进程内的一个执行单元。线程有自己的堆栈,但线程间没有单独的地址空间。

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

区别:

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

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

(3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源。

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

3.iOS中#import, #include和@class

@class用于.h文件中对类实例变量的声明,能解决循环包含的问题,在.m文件中需#import。

#import防止同一个文件被重复包含; #include是C/C++中的。

#import<>导入系统头文件;#import "" 导入自定义头文件。

4.__block和__weak区别

(1)__block  在MRC和ARC模式下都可修饰对象或基本数据类型

(2)__weak只可在ARC模式下修饰OC对象,不可修饰基本数据类型(int)

(3)__block对象可在block中被重新赋值,__weak不可

5.int和NSInteger区别

int在C语言中,和long的字节数是和操作系统指针所占位数相等。long的长度大于或等于int。NSInteger是一个封装,它会识别当前操作系统的位数(32或64),自动返回最大的类型(32位系统即NSInteger是32位,64位系统时,NSInteger是64位)。

你可能感兴趣的:(基础知识)