iOS基础知识点总结

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS基础知识点总结相关的知识,希望对你有一定的参考价值。

1.内存分区情况:

a.代码区:存放函数二进制代码;

b.数据区:系统运行时申请内存并初始化,系统退出时由系统释放,主要存放常量,静态变量,全局变量;

c.堆区:通过malloc等函数或者new动态申请到的,需要程序员手动申请和释放;

d.栈区:函数模块内申请,函数结束时由系统自动释放。存放局部变量,函数参数。

 

2.队列和栈的区别:

队列和栈是两种不同的数据容器,从数据结构的角度来说都是线性结构的,区别在于队列是一种先进先出的数据结构,在队列的两端都可以进行数据的操作,一端进行入队列操作,另一端进行出队列操作,而对于栈来说,栈是先进后出的方式,而且只能在栈顶进行数据的操作。

 

3.http协议中post和get请求的区别

post请求:

a.提交的参数包含在消息主体内,外界看不到请求数据;

b.提交的数据大小没有限制;

c.可以设置书签

get请求:

a.提交的参数不包含在消息体内,数据放在请求行

b.提交的数据大小有限制

c.不可以设置书签

 

4.Quartz 2D的绘图功能的三个核心概念

上下文:主要用于描述图形写入哪里

路径:是在图层上绘制的内容

状态:用于保存配置变化的值,填充和轮廓

 

5.Objective-c里面的NSInteger和int的区别

NSInteger是基本数据类型对象,不是NSNumber的子类,也不是NSObject的子类。NSInteger是int或者long的别名,区别在于NSInteger会根据系统是32位还是64位来决定本身是int还是long

 

6.Objective-c中创建线程的方法有哪些?在主线程中执行代码的方法是什么?延时执行代码的方法是什么?

创建线程的方法主要有三种:使用NSThread创建,使用GCD的dispatch创建,使用子类化的NSOperation,然后将其加入到NSOperarionQueue中。在主线程执行代码,方法是performSelectorOnMainThread,如果想延时执行代码可以用performSelector:onThread:withObject:waitUntilDone:

 

7.类别,类扩展和继承的比较

类别只能添加方法,不能添加属性,类扩展和继承可以添加属性,继承可以删除,修改方法,类比不能,类扩展添加的方法必须要实现,类扩展类似私有的类别

 

8.UIView和UIWindow,CALayer的联系和区别

UIView是视图基类,UIViewController是视图控制器基类,UIResponder是可以用来表示一个可以在屏幕上响应触摸事件的对象。

UIWindow是UIView的子类,主要有两个作用,一是提供一个区域用来显示UIView,二是用来分发事件,一个应用基本上只有一个UIWindow。

CALayer和UIView的区别:

CALayer是继承自NSObject,而UIView的继承结构是UIResponder:NSObject,从两者的继承结构可以看出,UIView可以响应触摸事件,而CALayer是不能响应触摸事件的,两者所属框架也不同,UIView来自UIKit框架,CALayer来自QuartzCore框架,CALayer的坐标系统多了一个anchorPoint的属性。

 

9.__block和__weak的区别

__block不管是在ARC还是MRC下都可以使用,可以修饰对象,也可以用来修饰基本数据类型

__weak只能在ARC模式下使用,只能修饰对象,不能修饰基本数据类型

__block对象可以在block中重新赋值,__weak不可以

 

10.常见的http状态码有哪些

http状态码:302代表请求重定向,500以上是服务器错误,400以上是地址错误或者找不到服务器,200以上是正确,100以上是请求接受成功。

 

11.static关键字的作用

函数体内的static变量的作用范围为该函数体,该变量的内存只被分配一次,其值在下次调用时还是维持上一次的值

类中的static成员变量属于整个类所拥有,对类的所有对象只有一份拷贝

类中的static成员函数属于整个类所拥有,这个函数不接收this指针,所以只能访问类的static成员变量

 

12.堆和栈的区别

管理方式上,栈是由编译器自己去管理,堆是由程序员去管理。

申请大小上,栈是向低地址扩展的数据结构,是一块连续的内存区域,栈顶的地址和栈的最大容量是系统预先规定好的,能从获得的空间较小;堆是向高地址扩展的数据结构,是不连续的内存区域。用的是链表的方式进行存储,堆的大小受限于系统中有效的虚拟内存的大小,堆获得的空间比较灵活,也比较大。

碎片问题上,堆会频繁的申请,释放,而且不是连续的,容易造成大量的碎片,对于栈来讲,就不会造成碎片空间,因为站是先进后出,是连续的内存区域

分配效率上,栈是由编译器管理,分配效率更高一点。

以上是关于iOS基础知识点总结的主要内容,如果未能解决你的问题,请参考以下文章

ios 基础知识点总结

iOS基础知识点总结

Java IO流基础总结

Java IO基础知识总结

李洪强iOS开发之iOS学习方法收集

Java 基础知识点 笔记总结