面试一

一、不用中间变量实现,swap(a,b)

a = a + b;
b = a - b;
a = a - b;

二、懒加载的好处

  • 防止对象被提前创建
  • 防止对象重复创建
  • 防止对象使用时,还没有创建
  • 可以在懒加载方法中进行初始化操作

三、runtime的理解
xcode7是没有runtime提示的,需要自己设置,应该是苹果小心眼了,不让你调用它内部的私有API

开发中使用场景,runtime什么时候用?
1、当要使用一个私有方法时,就要使用runtime
objc_msgSend(id self, SEL op, ...)
2、纯粹装逼用

  • 叫做运行时,oc的底层就是它实现的,就是运行时候的一些机制,其中最重要的就是消息机制
  • 对于c语言,函数的调用在编译的时候就决定调用哪个函数
  • oc不一样,属于动态调用过程,编译阶段并不能真正决定调用哪个方法,只有运行的时候才会根据方法名称去调用对应的方法
  • 这样看,我们在写c程序时,去调用一个未实现的函数,绝对报错!oc就不一样了,编译阶段可以调用任何方法,即使没有实现,只要声明后!在运行后才报找不到方法

四、消息是如何推送的
本地推送

远程推送

  • 远程推送服务(APNs): 所有的苹果设备,在联网的状态下,都会与服务器建立一个长连接,长连接就是苹果服务器会主动给客户端发消息,长连接的作用,时间校准,系统升级,查看我的iPhone。原理:假如QQ服务器想给QQ客户端推送消息,直接推送是不可能的。只能是QQ服务器推送给APNs服务器,然后APNs推送给QQ客户端

1、张三发送设备的UDID和应用的Bundle Identifier给APNs
2、经苹果服务器加密返回一个Device Token,这样APNs就知道推送给哪个设备的哪个应用
3、张三发送当前用户的Device Token和用户标识给QQ服务器
4、QQ服务器将用户信息存进数据库
5、有人要发送消息给张三
6、去数据库找张三的Device Token
7、通知苹果服务器
8、苹果服务器根据Device Token给张三设备

  • 极光推送原理:首先消息推送给极光服务器,极光再Device Token给苹果服务器,然后苹果的APNs服务器根据程序的bundle ID推送给你

五、数据库文件放哪儿?
1.沙盒结构

Application:存放程序源文件,上架前经过数字签名,上架后不可修改
Documents:常用目录,iCloud备份目录,存放数据,这里不能存缓存文件,否则上架不被通过
Library
Caches:存放体积大又不需要备份的数据,SDWebImage缓存路径就是这个
Preference:设置目录,iCloud会备份设置信息
tmp:存放临时文件,不会被备份,而且这个文件下的数据有可能随时被清除的可能

六、方法调用流程

  • 通过isa去对应的类中查找
  • 注册方法编号
  • 根据方法编号去查找对应方法
  • 找到只是最终函数地址,根据地址去方法区调用对应函数

七、内存五大区
栈 ,堆,全局区, 文字常量区,程序代码区

  • 栈:由编译器自动分配释放,不需要手动管理内存,自动管理
  • 堆:需要手动管理内存,自己释放
  • 全局区:存放全局变量和静态变量
  • 常量区:存放常量字符串
  • 代码区:存放二进制代码

八、5L水杯,3L水杯怎么取出4L水
先取3L水倒进5L水杯中,再取3L水倒进5L的水杯中,这样3L的水杯里面还有1L的水。5L水倒掉,将1L放入5L中,再取3L的水,这样就有4L的水了

九、UIView和核心动画的区别

核心动画什么时候用
不需要与用户进行交互时
根据路径做动画时
做转场动画时

  • 核心动画只作用在layer上
  • 核心动画看到的都是假象,并没有去修改UIView的真实位置

十、ipv6相关

  • 项目里面涉及和网络相关的是否支持ipv6
  • 项目里面涉及和网络相关的SDK是否支持ipv6
  • 项目的服务器是否支持ipv6

十一、优化

一、首页启动速度
启动过程中做的事情越少越好(尽可能将多个接口合并)
不在UI线程上作耗时的操作(数据的处理在子线程进行,处理完通知主线程刷新)
在合适的时机开始后台任务(例如在用户指引节目就可以开始准备加载的数据)
尽量减小包的大小
优化方法:
量化启动时间
启动速度模块化
辅助工具(友盟,听云,Flurry)
二、页面浏览速度
json的处理(iOS 自带的NSJSONSerialization,Jsonkit,SBJson)
数据的分页(后端数据多的话,就要分页返回,例如网易新闻,或者 微博记录)
数据压缩(大数据也可以压缩返回,减少流量,加快反应速度)
内容缓存(例如网易新闻的最新新闻列表都是要缓存到本地,从本地加载,可以缓存到内存,或者数据库,根据情况而定)
延时加载tab(比如app有5个tab,可以先加载第一个要显示的tab,其他的在显示时候加载,按需加载)
算法的优化(核心算法的优化,例如有些app 有个 联系人姓名用汉语拼音的首字母排序)
三、操作流畅度优化:
Tableview 优化(tableview cell的加载优化)
ViewController加载优化(不同view之间的跳转,可以提前准备好数据)
四、数据库的优化:
数据库设计上面的重构
查询语句的优化
分库分表(数据太多的时候,可以分不同的表或者库)
五、服务器端和客户端的交互优化:
客户端尽量减少请求
服务端尽量做多的逻辑处理
服务器端和客户端采取推拉结合的方式(可以利用一些同步机制)
通信协议的优化。(减少报文的大小)
电量使用优化(尽量不要使用后台运行)
六、非技术性能优化
产品设计的逻辑性(产品的设计一定要符合逻辑,或者逻辑尽量简单,否则会让程序员抓狂,有时候用了好大力气,才可以完成一个小小的逻辑设计问题)
界面交互的规范(每个模块的界面的交互尽量统一,符合操作习惯)
代码规范(这个可以隐形带来app 性能的提高,比如 用if else 还是switch ,或者是用!还是 ==)
code review(坚持code Review 持续重构代码。减少代码的逻辑复杂度)
日常交流(经常分享一些代码,或者逻辑处理中的坑)

2.App Bundle 里面有什么

Info.plist:此文件包含了应用程序的配置信息.系统依赖此文件以获取应用程序的相关信息
可执行文件:此文件包含应用程序的入口和通过静态连接到应用程序target的代码
资源文件:图片,声音文件一类的
其他:可以嵌入定制的数据资源

12、runtime实现的机制是什么?怎么用,一般用于干嘛。

运行时机制,runtime库里面包含了跟类、成员变量、方法相关的API,比如获取类里面的所有成员变量,为类动态添加成员变量、动态改变类的方法实现,为类动态添加新的方法等,需要导入<objc/message.h><objc/message.h>
①.runtime,运行时机制,它是一套C语言库。
②.实际上我们编写的所有OC代码,最终都是转换成为了runtime库的东西,比如类转换成了runtime库里面的结构体等数据类型,方法转换成了runtime库里面的C语言函数,平时调方法都是转成了objc_msgSend函数(所以说OC有个消息发送机制)
③、因此,可以说runtime是OC的底层实现,是OC的幕后执行者。
④、有了runtime库,能做什么呢?可以获取类里面的所有成员变量、为类动态的添加成员变量、动态的改变类的方法实现、为类动态添加新的方法等等。

13、iOS 的签名机制大概是怎样的?

假设,我们有一个APP需要发布,为了防止中途篡改APP内容,保证APP的完整性,以及APP是由指定的私钥发的。首先,先将APP内容通过摘要算法,得到摘要,再用私钥对摘要进行加密得到密文,将源文本、密文、和私钥对应的公钥一并发布即可。那么如何验证呢?
验证方首先查看公钥是否是私钥方的,然后用公钥对密文进行解密得到摘要,将APP用同样的摘要算法得到摘要,两个摘要进行比对,如果相等那么一切正常。这个过程只要有一步出问题就视为无效。

14、strong / weak / unsafe_unretained 的区别?

weak只能修饰OC对象,使用weak不会使计数器加1,对象销毁时修饰的对象会指向nil
strong等价与retain,能使计数器加1,且不能用来修饰数据类型
unsafe_unretained等价与assign,可以用来修饰数据类型和OC对象,但是不会使计数器加1,且对象销毁时也不会将对象指向nil,容易造成野指针错误

15、当系统出现内存警告时会发生什么?

会将不在当前窗口上的view暂时移除
如果放任内存警告,最终会导致软件强制被系统关闭

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容

  • 父类实现深拷贝时,子类如何实现深度拷贝。父类没有实现深拷贝时,子类如何实现深度拷贝。• 深拷贝同浅拷贝的区别:浅拷...
    JonesCxy阅读 991评论 1 7
  • • 深拷贝同浅拷贝的区别:浅拷贝是指针拷贝,对一个对象进行浅拷贝,相当于对指向对象的指针进行复制,产生一个新的指向...
    WSGNSLog阅读 1,234评论 0 1
  • 1.1 谈一谈GCD和NSOperation的区别? 首先二者都是多线程相关的概念,当然在使用中也是根据不同情境进...
    John_LS阅读 1,307评论 0 12
  • 西龛山上夕日红,踏步秋叶冬渐浓,举步越过沟壑水,几曾身同隔世空!
    一舸鸱夷去阅读 134评论 0 0
  • 《归藏命契》有云:青蟒者,居巅也,卧于云,若离,顷殁也。噬鸟兽,吞云雾,长十丈余。若采参者近,亦噬之,罕有窥其貌者...
    锈钟瑟鼓阅读 645评论 7 5