常见面试题
面试中常见的面试题集锦
天佑木枫
好记性不如烂笔头
展开
-
iOS日常开发之面试题集锦(持续更新中...)
目录1、block的本质1.1 block的本质1.2 为什么在默认情况下无法修改被block捕获的变量? __block都做了什么?2、可变集合类 和 不可变集合类的 copy 和 mutablecopy有什么区别?如果是集合是内容复制的话,集合里面的元素也是内容复制么?3、关于nonatomic和atomic3.1 区别3.2 atomic是绝对的线程安全么?为什么?3.3 如果不是,那应该如何实现?3.3.1 使用NSLock实现的锁3.3.2 使用synchronized关键字构建的锁3.3.3 使原创 2020-07-24 15:50:33 · 343 阅读 · 0 评论 -
iOS日常开发之设计模式
1、MVCMVC是最普遍认知的设计模式,MVC模式将页面的逻辑分为3块:Model(模型数据业务)、View(UI展示业务)、Controller(协调者-控制器)这样的划分很好理解,维护时,只要找到对应的那一块进行修改就好了。在iOS开发中,UIKIt框架是将控制器Controller与View进行绑定了的,每个控制器都有View对象,代码添加UI子控件细节或者在xib与storyboard中子视图可以直接与controller进行关联,都会导致控制器中难以避免很多本该View去负责的UI..原创 2020-07-23 17:06:22 · 115 阅读 · 0 评论 -
iOS日常开发之load和initialize的区别
两者都会自动调用父类的,不需要super操作,且仅会调用一次(不包括外部显示调用). load和initialize方法都会在实例化对象之前调用,以main函数为分水岭,前者在main函数之前调用,后者在之后调用。这两个方法会被自动调用,不能手动调用它们。 load和initialize方法都不用显示的调用父类的方法而是自动调用,即使子类没有initialize方法也会调用父类的方法,而load方法则不会调用父类。 load方法通常用来进行Method Swizzle,initia原创 2020-07-23 17:01:53 · 338 阅读 · 0 评论 -
iOS日常开发之objc在向一个对象发送消息时,发生了什么?
objc在向一个对象发送消息时,发生了什么?根据对象的isa指针找到类对象id,在查询类对象里面的methodLists方法函数列表,如果没有在好到,在沿着superClass,寻找父类,再在父类methodLists方法列表里面查询,最终找到SEL,根据id和SEL确认IMP(指针函数),在发送消息;...原创 2020-07-23 16:58:25 · 246 阅读 · 0 评论 -
iOS日常开发之nonatomic和atomic
之前面试,面试官提了一个问题,nonatomic和atomic的区别?atomic是绝对的线程安全么?为什么?如果不是,那应该如何实现?nonatomic:表示非原子,不安全,但是效率高。atomic:表示原子行,安全,但是效率低。atomic:不能绝对保证线程的安全,当多线程同时访问的时候,会造成线程不安全。可以使用线程锁来保证线程的安全。...原创 2020-07-23 16:57:03 · 200 阅读 · 0 评论 -
iOS日常开发之frame和bounds的不同
之前面试,面试官提了一个问题,frame和bounds有什么不同,如果父view的bounds的y=-100,会有什么变化?子view的bounds的y=-100,又有什么变化?frame的size一定等于bounds的size吗?今天我们来详细了解一下1、frame和bounds是一样的吗?当然不是frame 指的是这个view在它superview的坐标系的坐标和大小bounds指这个view在它自己坐标系的坐标和大小,每个新建的view的bounds默认的( x , y ) 都是 (...原创 2020-07-23 16:55:13 · 624 阅读 · 0 评论 -
iOS lldb(gdb)常用的调试命令
(命令)和(子命令):LLDB调试命令的名称。命令和子命令按层级结构来排列:一个命令对象为跟随其的子命令对象创建一个上下文,子命令又为其子命令创建一个上下文,依此类推。 2. :执行命令的操作 3. :命令选项 4. :命令的参数 5. []:表示命令是可选的,可以有也可以没有.打印对象po如果我们想打印对象。我们需要使用命令选项:-O。为了更方便的使用,LLDB为expression -O –定义了一个别名:po执行表达式expression执行某个表达式。 我们在代码运行过程中,..原创 2020-07-13 16:40:23 · 548 阅读 · 0 评论 -
iOS 交换两个变量的值
通常我们的做法是:定义一个新的变量,借助它完成交换。代码如下:int a,b;a=10; b=15;int t;t=a; a=b; b=t;这种算法易于理解,特别适合帮助初学者了解计算机程序的特点,是赋值语句的经典应用。在实际软件开发当中,此算法简单明了,不会产生歧义,便于程序员之间的交流,一般情况下碰到交换变量值的问题,都应采用此算法(以下称为标准算法)。上面的算法最大的缺点就是需要借助一个临时变量。这里我们可以用三种算法来实现:1)算术运算2)指针地址操作3)位运算原创 2020-07-13 16:31:17 · 632 阅读 · 0 评论