Linux编程点击右侧关注,免费入门到精通!

作者丨_小迷糊

http://www.cocoachina.com/ios/20190218/26350.html

引言

过年之后相信有一部分的人,早已磨刀霍霍向大厂。势必要大展拳脚,必将在大厂内创出一片天地。但是,想必大家都知道:最近几年的最严重的互联网寒冬来临,各位兄弟都会说“江湖再见”。耳边总是充刺着流言蜚语,这个地方裁员了,这个地方缩减HC。弄得人心慌慌。年后将是一片血雨腥风,程序界的江湖将在这一天精彩斑斓。

但我们要知道,寒冬之中,什么是最珍贵,就让鄙人告诉你:人才。只要有过硬的技术和装备,在逆风直下的情况下,咱们也能迎难而上,打他个戳手不及。不是“李云龙”大哥说:“过狭路相逢勇者胜.”

最近几天看了朋友,到处厮杀,经过一番斗争,最终夺下头筹获得多家大厂的offer。

承蒙兄弟抬爱,感情深厚。拿出《iOS中高级面试宝典》赠与小弟参悟。经过小弟我的反复参悟和整理,现在共享出来,希望与大家一起学习参悟。小弟我先说一下,面试虽然有技巧,但咋们绝不是吹嘘与伪造之辈,因先当花点时间静心闭关修炼,带到出关之日,必进大厂,薪资翻倍,岂不快哉!!!

参悟规则

作为一名优秀的程序员,肯定是不会浪费时间在一个 :

一:没有晋升,没有职业发展的公司

二:也不会停留在某一个技术层面不前进的公司

三:我愿付出真心,你却不愿有待我的公司

本博客的知识点较多,花点时间一个个理解并记忆后,自然也就融会贯通,无所畏惧。面试iOS也就分分钟。

本宝典为了便于记忆,快速达到应试状态,类似于复习知识大纲。知识点会尽量的精简与提炼知识脉络,并不去展开深入细节,面面俱到。有兴趣或者有疑问的兄弟可以自行谷歌下对应知识点的详细内容。

1、swift和oc的区别

(1) Swit没有地址指针的概念

(2)泛型

(3)类型严谨对比oc的动态绑定

2、编译连接

id和instancetype的区别

instancetype只能故返回值编译时判断真实类型,不符合发警告

特殊情况:关联类型返回方法如类方法lloc或new开头实例方法中,以autorelease,init,retain,或self开头

3、synthesize & denamic

1:通过@sythesize

指令告诉编译器在编译期间产生getter/setter方法。

2:通过@dynamic指令,自己实现方法。

有些存取是在运行时动态创建的,如在CoreData的NSManagedObject类使

4、在项目开发中常用的开发工具有哪些?

instrument

beyondCompare

git

5、UlTableView & UlCollection

UlCollectionView是iOS6新引进的API,用于展示集合视图,布局更加灵活,其用法类似于UITableView。

而UICollectionView、UlCollectionViewCell与UITableView、UITableViewCell在用法上有相似的也有不同的,

下面是一些基本的使用方法:对UITableView,仅需要UITableViewDataSource,UITableViewDelegate这两个协议

使用UlCollectionView需要实现:

UICollectionViewDataSource,UlCollectionViewDelegate,
UlCollectionViewDelegateFlowLayout这三个协议.

这是因为UlCollectionViewDelegateFlowL ayou实际上是UCollectionViewDelegate的一个子协议,它继承了

UlCollectionViewDelegate,它的作用是提供一些定义UlCollectionView布局模式的函数

6、NSProxy & NSObject

NSObjetct:

NSObject协议组对所有的Object -C下的objects都生效。如果objects遵从该协议,就会波看作是first -class

objects (- 级类)。另外, 遵从该协议的objects的retain, release, autorelease等 方法也服从objects的管理和在Foundation中定义的释放方法。- -些容器中的对象也可以管理这些

objects,比如说NSArray和NSDictionary定义的对象。Cocoa的根类也遵循该协议,所以所有继承NSObjects的

objects都有遵循该协议的特性

NSProXY:NSProxy是一个虚基类,它为一些表现的像是其它对象替身或者并不存在的对象定义一套API。 -般的,发送给代理的消息被转发给一个真实的对象或者代理本身load(或者将本身转换成)一个真实的对象。

NSProxy的基类可以被用来透明的转发消息或者耗费巨大的对象的lazy初始化。

7、Object & Swift

Obejective-C复杂的语法,更加简单易用、有未来,让许多开发者心动不已.

苹果宣称Swift的特点是:快速、现代、安全、互动,而且明显优于Objective-C语言
可以使用现有的Cocoa和Cocoa Touch框架

Swift取消了Objective C的指针及其他不安全访问的使用

舍弃Objective C早期应用Smalltalk的语法,全面改为句点表示法提供了类似Java的名字空间(namespace)、
泛型(generic)、运算对象重载(operator overloading) Swift 被简单的形容为“没有C的Objective-C" (Objective- C without theC)为苹果开发工具带来了Xcode

Playgrounds功能,该功能提供强大的互动效果,能让Swift源代码在撰写过程中实时显示出其运行结果;

基于C和Objective-C,而却没有C的一些兼容约束; 采用了安全的编程模式;界面基于Cocoa和Cocoa Touch框架;保留Smaltalk的动态特性

8、传值通知&推送通知(本地&远程)

传值通知:类似通知,代理,Block实现值得传递

推送通知:推送到用户手机对应的App上(主要是不再前台的情况)本地通知。

local notfication,用于基于时间行为的通知,比如有关日历或者todo列表的小应用。另外,应用如果在后台执行,iOS允许它在受限的时间内运行,它也会发现本地通知有用。比如,一个应用,在后台运行,向应用的服务器端获取消息,当消息到达时,比如下载更新版本的提示消息,通过本地通知机制通知用户。

本地通知是UILocalNotification的实例,主要有三类属性:

scheduled time,时间周期,用来指定iOS系统发送通知的8期和时间;

ntilication type,通知类型,包括警告信息、动作按钮的标题、应用图标上的badge (数字标记)和播放的声音:

自定义数据,本地通知可以包含一个dictionary类型的本地数据。

对本地通知的数量限制,iOS最 多允许最近本地通知数量是64个,超过限制的本地通知将被iOS忽略。远程通知(需要服务器)流程大概是这样的

1.生成CerticateSigningRequest. certSigningRequest文件

2.将CertilicateSigningRequest.certSigningRequest上传进developer,导出.cer文件

3.利用CSR导出P12文件

4.需要准备下设备token值(无空格)

5.使用OpenSSL合成服务器所使用的推送证书

一般使用极光推送,步骤是一样的, 只是我们使用的服务器是极光的,不需要自己大服务器!

9、第三方库&第三方平台

第三方库:

一般是指大牛封装好的一一个框架(库) ,或者第三方给我们提供的一个库,这里比较笼统*第三方平台:

指第三方提供的-些服务,其实很多方面跟第三方库是一样的,但是还是存在一些区别。

区别:库: AFN, ASI, Alomofire, MJRefresh, MJExtension, MBProgressHUD平台:极光,百度,友盟,Mob,环信

imageName和mageWithContextOfFile的区别?哪个性能高

(1)用imageNamed的方式加载时,图片使用完毕后缓存到内存中,内存消耗多,加载速度快。即使生成的对象被autoReleasePool释放了,这份缓存也不释放,如果图像比较大,或者图像比较多,用这种方式会消耗很大的内存。

imageNamed采用了缓存机制,如果缓存中已加载了图片,直接从缓存读就行了,每次就不用再去读文件了,效率会更高。

(2) ImageWithContextOfile加载, 图片是不会缓存的,加载速度慢。

(3)大量使用imageNamed方式会在不需要缓存的地方额外增加开销CPU的时间当应用程字需要加载- -张比较大的图片并且使用一次性,那么其实是没有必要去缓存这个图片的,用imageWithContentsOfile是 最为经济的方式,这样不会因为Ullmage元素较多情况下,CPU会被逐个分散在不必要缓存上浪费过多时间

10、NSCache & NSDcitionary

NSCache与可变集合有几点不同:

NSCache类结合了各种自动删除策略,以确保不会占用过多的系统内存。如果其它应用需要内存时,系统自动执行这些策略。当调用这些策略时,会从缓存中删除一些对象,以最大限度减少内存的占用。

NSCache是线程安全的,我们可以在不同的线程中添加、删除和查询缓存中的对象,而不需要锁定缓存区域。

不像NSMutableDictionary对象,- 一个缓存对象不会拷贝key对象。

NSCache和NSDictionary类似,不同的是系统回收内存的时候它会自动删掉它的内容。

(1)可以存储(当然是使用内存

(2)保持强应用,无视垃圾回收. =>这-点同NSMutableDictionary(3)有固定客户.

11、UlView的setNeedsDisplay和setNeedsLayout方法

在Mac OS中NSWindow的父类是NSResponder,而在iOS中UIWindow的父类是UIVIew。程序一般只有一一个窗口但是会又很多视图

UlView的作用: 描画和动画,视图负责对其所属的矩形区域描画、布局和子视图管理、事件处理、可以接收触摸事件、事件信息的载体、等等。

UIViewController负责创建其管理的视图及在低内存的时候将他们从内存中移除。还为标准的系统行为进行响应。

layOutSubViews可以在自己定制的视图中重载这个方法,用来调整子视图的尺寸和位置。

UIView的setNeedsDisplay(需 要重新显示,绘制和setNeedsLayout(需要重新布局)方法。首先两个方法都是异步执行的。而setNeedsDisplay会调用自动调用drawRect方法,这样可以拿到UIGraphicsGetCurrentContext,就可以画画了。而setNeedslayout会默认调用layoutSubViews,就可以处理子视图中的一些数据。

综上所述setNeedsDisplay方便绘图,而layoutSubViews方便出来数据setNeedDisplay告知视图它发生了改变,需要重新绘制自身,就相当于刷新界面

12、UILayer & UiView

UlView是iOS系统中界面元素的基础,所有的界面元素都继承自它。它本身完全是由CoreAnimation来实现的(Mac下似乎不是这样)。它真正的绘图部分,是由一个叫CAL ayer (Core Animation Layer)的类来管理。UIView本身,更像是-个CAL ayer的管理器,访问它的跟绘图和跟坐标有关的属性,例如frame, bounds等等,实际 上内部都是在访问它所包含的CAL ayer的相关属性。

UIView有个重要属性layer,可以返回它的主CAL ayer实例。

UIView的CAL ayer类似UIView的子View树形结构,也可以向它的layer上添加子layer,来完成某些特殊的表示。即CALayer层是可以嵌套的。

UIView的ayer树形在系统内部,被维护着三份opy。分别是逻辑树,这里是代码可以操纵的;动画树,是一个中间层,系统就在这一层上更改属性,进行各种渲染操作;显示树,其内容就是当前正被显示在屏幕上得内容。

动画的运作: 对UMiew的sublayer(非主Layer)属性进行更改,系统将自动进行动画生成,动画持续时间的缺省值似乎是0.5秒。

坐标系统: CAL ayer的坐标系统比UIView多了-个anchorPoint属性,使用CGPoint结构表示,值域是0~1,是个比例值。

渲染: 当更新层,改变不能立即显示在屏幕上。当所有的层都准备好时,可以调用setNeedsDisplay方法来重绘显示。

变换: 要在一个层中添加- -个3D或仿射变换,可以分别设置层的transform或fineTranstorm属性。

变形:  Quartz Core的渲染能力,使二维图像可以被自由操纵,就好像是三维的。图像可以在一个三维坐标系中以任意角度被旋转,缩放和倾斜。CATranstform3D的一套方法提供了一些魔术般的变换效果。

13、layoutSubViews & drawRects

layoutSubviews在以下情况下会波调用(视图位置变化是触发):

1、init初始化不会触发layoutSubviews。
2、addSubview会触发layoutSubviews。
3、设置Vview的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化。
4、滚动一个UISCrollView会触发layoutSubviews。
5、旋转Screen会触发父UIView上的layoutSubviews事件。
6、改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件。
7、直接调用setLayoutSubviews。

drawRect在以下情况下会被调用:

1、如果在UIView初始化时没有设置rect大小,将直接导致drawRect不被自动调用。drawRect 掉用是在Controller->loadView,Controller->viewDidLoad两方法之后掉用的.所以不用担心在控制器中,这些View的drawRect就开始画了.这样可以在控制器中设置-些值给View(如果这些View draw的时候需要用到某些变量值).

2、该方法在调用sizeToFit后被调用,所以可以先调用sizeToFt计算出size。然后系统自动调用drawRect:方法。

3、通过设置contentMode属性直为UIViewContentModeRedraw。那么将在每次设置或更改rame的时候自动调用dr awRect。

4、直接调用setNeedsDisplay, 或者setNeedsDisplaylnRect:触发drawRect,但是有个前提条件是rect不能为0。

drawRect方法使用注意点:

1、若使用UIView绘图,只能在drawRect:方法中获取相应的contextRef并绘图。如果在其他方法中获取将获取到一个invalidate的ref并且不能用于画图。

drawRect: 方法不能手动显示调用,必须通过调用setNeedsDisplay或者setNeedsDisplaynRect,让系统自动调该方法。

2、若使用calayer绘图,只能在drawInContext: 中(类 似鱼drawRect)绘制,或者在delegate中的相应方法绘制。同样也是调用setNeedDisplay等间接调用以上方法

3、若要实时画图,不能使HgestureRecognizer,只能使用touchbegan等方法来掉用setNeedsDisplay实时刷新屏幕

14、UDID & UUID

UDID是Unique Device ldentifer的缩写中文意思是设备唯一标识

在很多需要限制一台设备一个账号的应用中经常会用到,在Symbian时代,我们是使用IMEI作为设备的唯一标识的,可惜的是Apple官方不允许开发者获得设备的IMEI.

lUlDevice currentDevicel uniqueldentie]

但是我们需要注意的一点是,对于已越狱了的设备,UDID并不是唯一的 使用Cydia插件UDIDFaker,可以为每一个应用分配不同的UDID.所以UDID作为标识唯一设备的用途已经不大了。

UUID是Universally Unique ldentifier的缩写,中文意思是通用唯一识别码由网上资料显示,UUID是一个软件建构的标准,也是被开源软件基金会(Open Software Foundation,OSF)的组织在分布式计算环境(DistributedComputing Enviroment,DCE)领域的一部份.UUID的目的,是 让分布式系统中的所有元素都能有唯一的辨识资讯,而不需要透过中央控制端来做辨识资讯的指定。

15、CPU & GPU

CPU:中央处理器(英 文Central ProcessingUnit)是一台计算机的运算核心和控制核心。CPU、内部存储器和输入输出设备是电子计算机三大核心部件。其功能主要是解释计算机指令以及处理计算机软件中的数据。

GPU:英文全称Graphic Processing Unit,中文翻译为“图形处理器”。一个专门的图形核心处理器。GPU是显示卡的“大脑”,决定了该显卡的档次和大部分性能,同时也是2D显示卡和3D显示卡的区别依据。2D显示芯片在处理3D图像和特效时主要依赖CPU的处理能力,称为“软加速”。3D显示芯片是将三维图像和特效处理功能集中在显示芯片内,也即所谓的"硬件加速"功能

结语

由于宝典内容过多,我就不一一介绍,就先写到这里的吧!

 推荐↓↓↓ 

?16个技术公众号】都在这里!

涵盖:程序员大咖、源码共读、程序员共读、数据结构与算法、黑客技术和网络安全、大数据科技、编程前端、Java、Python、Web编程开发、Android、iOS开发、Linux、数据库研发、幽默程序员等。

万水千山总是情,点个 “好看” 行不行

中高级iOS大厂面试宝典,拿到offer率80%,金三银四将是你的新起点相关推荐

  1. 中高级iOS大厂面试宝典,进厂率80%,金三银四将是你的新起点

    引言 过年之后相信有一部分的人,早已磨刀霍霍向大厂.势必要大展拳脚,必将在大厂内创出一片天地.但是,想必大家都知道:最近几年的最严重的互联网寒冬来临,各位兄弟都会说"江湖再见".耳 ...

  2. ios 与web服务器传值_中高级iOS大厂面试宝典,拿到offer率80%,金三银四将是你的新起点...

    引言 过年之后相信有一部分的人,早已磨刀霍霍向大厂.势必要大展拳脚,必将在大厂内创出一片天地.但是,想必大家都知道:最近几年的最严重的互联网寒冬来临,各位兄弟都会说"江湖再见".耳 ...

  3. Android上海找工作经历分享,半月收获10余offer,收藏起来金三银四面试旺季捞份offer走

    金三银四,找工作的好时段,分享一段自己找工作的经历. 个人经历 本人 14 年毕业,在学校里面自学 Android 开发,在 常州 呆了三年,小城市,IT 不发达,倒闭了 2 家公司,然后杭州谋求发展 ...

  4. 金三银四,磨砺锋芒;剑指大厂,扬帆起航(2020年最全大厂WEB前端面试题精选)下

    引言 元旦匆匆而过,2020年的春节又接踵而来,大家除了忙的提着裤子加班.年底冲冲冲外,还有着对于明年的迷茫和期待!2019年有多少苦涩心酸,2020年就有更多幸福美好,加油,奥利给!怀着一颗积极向上 ...

  5. 金三银四,磨砺锋芒;剑指大厂,扬帆起航(2020年最全大厂WEB前端面试题精选)上

    引言 元旦匆匆而过,2020年的春节又接踵而来,大家除了忙的提着裤子加班.年底冲冲冲外,还有着对于明年的迷茫和期待!2019年有多少苦涩心酸,2020年就有更多幸福美好,加油,奥利给!怀着一颗积极向上 ...

  6. 阿里p8耗时一个月整理的面试突击手册助力金三银四

    2022年的互联网行业竞争越来越严峻,程序员一个比一个内卷,面试也是越来越难,一直以来我都想整理一套完美的面试宝典,奈何难抽出时间,这次我利用春节假期耗时一个月整理了这一份Java面试突击手册,离今年 ...

  7. 金三银四已接近尾声,进大厂,你准备好了吗?过五关斩六将七轮面试终拿互联网大厂Offer!!(建议收藏)

    大家好,我是冰河~~ 金三银四已接近尾声,进大厂,你准备好了吗?还是那句话:进大厂临时抱佛脚是肯定不行的,一定要注重平时的总结和积累,多思考,多积累,多总结,多复盘,将工作经历真正转化为自己的工作经验 ...

  8. springboot listener_Springboot 全套面试提升宝典,为金三银四冲刺

    简介: Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配 ...

  9. 【建议收藏】2021年中高级Android大厂面试秘籍,为你保驾护航金三银四,直通大厂

    一眨眼又到年底了,每到这个时候,我们都会慢慢反思,这一年都做了什么?有什么进步?年初的计划都实现了吗?明年年初有跳槽的底气了吗? 况且2020年我们经历了新冠疫情的洗礼,很多程序员都经历了失业,找工作 ...

  10. 2021年中高级Android大厂面试秘籍,为你保驾护航金三银四,直通大厂

    一眨眼已经到2021年了,该反思一下,2020年都做了什么?有什么进步?年初的计划都实现了吗?金三银四有跳槽的底气了吗? 2020年我们经历了新冠疫情的洗礼,很多程序员都经历了失业,找工作的恐慌.导致 ...

最新文章

  1. 比特币现金诞生一周年,BCH的未来在哪?
  2. 魅族的android m l,Android M 外部存储剖析
  3. Serverless 实战 —— Funcraft + OSS + ROS 进行 CI/CD
  4. 11. Java基础之继承
  5. 统一流控服务开源:基于.Net Core的流控服务
  6. leetcode1277. 统计全为 1 的正方形子矩阵(dp)
  7. 前端学习(2944):前一天回顾
  8. logger异常日志要点总结
  9. python降维之时间类型数据的处理_Python学习数据降维方法
  10. android banner动画框架,Android Studio Banner轮播图使用
  11. 计算机二级没过学校不给学位证,如果学校说计算机二级没过不给发学位证改怎么办...
  12. C++走向远洋——43(人数不定的工资类,动态分配内存与释放)
  13. Lucene学习入门——核心类API
  14. java 引用机制_Java编程开发之浅析Java引用机制
  15. C++ Const 初步总结(《C++程序设计语言》读后感)
  16. 2023.3.5英语单词学习笔记
  17. 深度神经网络之Keras(三)——正则化、超参数调优和学习方向
  18. python中turtle隐藏画笔_python中Turtle的画笔命令有哪些?
  19. Jfreechart图表生成方法
  20. 【机器学习】Goldstein-Armijo line-search

热门文章

  1. vbox 虚拟机支持ipv6
  2. Python练手项目:计算机自动还原魔方(3)还原两层
  3. framework中phonewindowmanager对power键的处理
  4. .Net Framework 中设置Web Proxy 的方法
  5. Unity 弹道轨迹
  6. 02-Hadoop集群搭建
  7. poj 3295 Tautology【离散数学之重言式】
  8. vlookup使用步骤_VLOOKUP函数的使用方法详解
  9. Python 笔记(18)— 类的私有属性读取和修改方法
  10. DNS测试工具querperf