zoukankan      html  css  js  c++  java
  • 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.堆和栈的区别

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

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

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

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

  • 相关阅读:
    jenkins安装
    HTTP协议客户端是如何向服务器发送请求
    接口概念
    fiddler导出har格式转化成yml格式

    双硬盘双系统装错了记录
    chrome的版本和driver版本对应表
    monkey详解
    adb命令熟悉
    cookie、session、token
  • 原文地址:https://www.cnblogs.com/qirutr/p/5150089.html
Copyright © 2011-2022 走看看