Tag: Ios面试问题

IOS热门访谈问答(2019年1月)第2部分

本文包括针对IOS职位在VMware中最近提出的问题。 希望对您有帮助。 如有其他疑问,请查看以前的文章-2018/2019年度IOS面试常见问题解答 Q1。 什么是方法混淆,您在哪里使用过? 回答:方法混乱是更改现有选择器的实现的过程。 通过更改选择器如何映射到类的分派表中的基础函数的方式,可以在运行时更改Objective-C中的方法调用,从而使这项技术成为可能。 参考: https://www.uraimo.com/2015/10/23/effective-method-swizzling-with-swift/ https://nshipster.com/method-swizzling/ Q2。 代码审查流程是什么?在审查基于Swift的iOS应用程序时,您需要考虑哪些主要方面? 回答:没有完美的答案,但是您可以尝试覆盖尽可能多的内容,例如内存占用量,应用程序性能,可选项等。 扩展中实现的代表 所有方法应该是私有的,文件私有的还是最终的 是对可选选项的使用最少还是已正确处理 是用的! 强迫解包理性且不易崩溃。 Any或AnyObject的使用应最少。 使用特定的类型或协议。 甚至更好地使用泛型 仅公开需要测试的方法 是否有看似过长的课程? 也许应将某些功能拆分为单独的类。 该应用程序是使用ARC,MRR还是混合编译的? 如果不是全部的ARC,为什么不 该应用程序是否充分利用了常见的可可模式,例如MVC,通知,KVO,延迟加载等? 是否正在采取任何措施,采取不受Apple支持但在iOS世界中越来越流行的模式,例如Reactive Cocoa和MVVM? 是否有负担过多责任的视图控制器? 检查静态调度和动态调度 Q3。 iOS应用程序的单元测试框架是什么,您使用过吗? 回答:一些流行的IOS应用测试框架。 Appium :是一种开源测试工具。 它提供了Android和IOS上的应用程序测试过程的自动化。 它允许用户检查程序源代码的每个单独部分,并在编程过程中系统地完成。 Calabash :是一个IOS自动化测试工具。 该框架的测试过程基于Cucumber(一种广泛的自动化测试工具)完成。 XCTest :是IOS功能测试框架。 该框架可用于在开发过程的任何状态下进行测试。 EarlGrey :是最好的UI测试框架。 这个开源框架易于与IOS集成。 笑话 :是一个自动化的测试框架。 使用此框架,我们可以确保用户界面不会意外更改。 Q4。 什么是模拟? 回答:模拟主要用于单元测试。 被测对象可能依赖于其他(复杂)对象。 要隔离对象的行为,您想用模拟真实对象行为的模拟代替其他对象。 […]

IOS热门面试问答(2019年4月)第一部分

下一页 :IOS面试常见问题解答(2019年4月)第二部分 什么是可可粉? Cocoa和Cocoa Touch分别是OS X和iOS的应用程序开发环境。 Cocoa和Cocoa Touch都包含Objective-C运行时和两个核心框架: Cocoa (包括Foundation和AppKit框架)用于开发在OS X上运行的应用程序。 Cocoa Touch (包括Foundation和UIKit框架)用于开发可在iOS上运行的应用程序。 2. Swift 5有什么新功能? https://medium.com/ios-expert-series-or-interview-series/whats-new-in-swift-5-0-25dc37f56f29 3. Nil和NULL之间的区别? 4. AnyObject和Any之间的区别? Any可以代表任何类型的实例,包括函数类型。 随着Swift 3的发布, AnyObject和Any含义已经改变。 在Swift 3中,Objective-C中的id类型现在映射到Swift中的Any类型,该类型描述任何类型的值,无论是类,枚举,结构还是任何其他Swift类型。 此更改提高了Swift和Objective-C的兼容性。 例如,从Swift 3开始,Objective-C集合可以保存Any类型的元素。这意味着Foundation的NSArray类型可以存储String , Float和Int实例。 AnyObject是所有类隐式遵循的协议。 当您需要无类型对象的灵活性时,或者使用桥接的Objective-C方法和返回无类型结果的属性时,可以使用AnyObject 。 AnyObject可用作任何类,类类型或仅类协议的实例的具体类型。 AnyObject协议还可用于弥补Swift和Objective-C之间的鸿沟。 一些Objective-C API使用AnyObject协议来提供与Swift的兼容性。 5.什么是@synthesize和@dynamic? @synthesize将为您的属性生成getter和setter方法。 @dynamic只是告诉编译器,getter和setter方法不是由类本身实现的,而是由其他地方实现的(例如超类或将在运行时提供)。 使用propertyName提及@dynamic会告诉编译器不要创建访问器方法,因为用户将来会动态提供实现。 苹果允许其开发人员在运行时使用动态方法解析提供方法实施。 6.什么是inout参数? 传递给Swift函数的所有参数都是常量 ,因此您无法更改它们。 如果需要,可以传入一个或多个参数inout ,这意味着可以在函数内部更改它们,这些更改反映在函数外部的原始值中。 func doubleInPlace(number: inout Int) { […]

IOS面试常见问题解答(2018年11月)第1部分

资深iOS开发人员面试问题,面试问题,经验丰富的ios面试问题 对于旧月的问题,请转到iOS面试问题2018系列 让我们开始🙂 Q1。 您如何在UserDefaults中保留文件引用,即如何存储对文件的引用,以便即使文件从一个文件夹移动到另一个文件夹,也可以访问它? 解决方案:文件URL指定文件系统中的位置。 如果使用set(_:forKey:)方法存储特定文件的位置,并且用户移动了该文件,则您的应用在下次启动时可能无法找到该文件。 要通过文件的文件系统标识存储对文件的引用,您可以改用bookmarkData(options:includingResourceValuesForKeys:relativeTo:) NSURL bookmarkData(options:includingResourceValuesForKeys:relativeTo:)方法创建NSURL书签数据,并使用set(_:forKey:)方法将其持久化。 然后,您可以使用URLByResolvingBookmarkData:options:relativeToURL:bookmarkDataIsStale:error:方法将用户默认存储的书签数据解析为文件URL。 Q2。 与CoreData或SQLite之类的东西相比,在NSUserDefaults中存储东西的成本是多少? 解决方案:在NSUserDefaults中存储内容基本上有两个成本: 1)要么全部存储在内存中,要么都不存储在内存中(从技术上讲,如果您使用-initWithSuiteName:您可以单独对其进行管理,但通常情况下它全部或全部都不存在)。 因此,如果您在偏好设置中有一堆无关紧要的东西,它将与您检查的布尔值一起加载。 2)同样,所有这些都立即更新。 如果您设置了这个小布尔值,则整个文件将再次保存到磁盘中(尽管:它稍后会在后台程序中将其保存到磁盘中,因此不一定会使您的程序变慢。尽管如此,它仍然不是免费的) 。 由于您只存储了极少量的东西,因此这对您都不重要。 如果您最终存储了更多的东西,那么这两个地方(内存使用情况和设置新值的时间)将由您支付。 从用户默认值读取值几乎总是非常快,几乎与存储多少无关。 另一个随机的NSUserDefaults性能提示:在用户默认值内部的集合内设置值比在用户默认值中直接设置相同值要昂贵。 这样保持事物“平坦”会有帮助。 Q3。 @synchronized如何工作? 解决方案:查看源代码之后,您会发现有更多事情要做。 苹果最多使用三个锁定/解锁序列,部分原因是它们还添加了异常解除功能。 与自旋锁方法相比,这将是一个放缓。 由于设置属性通常很快,因此自旋锁非常适合这项工作。 当您需要确保可以在不导致代码死锁的情况下引发异常时, @synchonized(self)很好。 为了找出@synchronized作用,我看到了这样的内容: Q4。 黑白之间的差异ScheduledTimerWithTimeInterval&timerWithTimeInterval吗? 解决方案:计划的计时器会自动添加到运行循环中,而未计划的计时器则不会。 计时器功能相同。 因此,如果计时器不是默认运行循环(timerWithTimInterval)的一部分,它将触发什么? NSRunLoop的方法addTimer:forMode: 用更具描述性的方式: ScheduledTimerWithTimeInterval:invocation:repeats :和 ScheduledTimerWithTimeInterval:target:selector:userInfo:repeats : 创建自动添加到NSRunLoop的计时器,这意味着您不必自己添加它们。 将它们添加到NSRunLoop是导致它们触发的原因。 timerWithTimeInterval:invocation:repeats :和timerWithTimeInterval:target:selector:userInfo:repeats : 您必须使用以下代码将计时器手动添加到运行循环中: [[NSRunLoop mainRunLoop] addTimer:repeatingTimer forMode:NSDefaultRunLoopMode]; Q5。 […]

IOS面试常见问题解答(2018年9月)第2部分

iOS最新面试题 在本文中,我要向iOS开发人员添加最近问到的新问题,让我们开始吧。 Q1。 什么是NSZombie? 当您的iPhone应用程序因“错误访问”而崩溃时,您将遇到麻烦–内存错误,您试图在已删除的对象上调用方法。 Instruments拥有对NSZombie的支持-通过向您显示导致崩溃的对象的每个分配,保留,释放和自动释放的完整历史记录,可以轻松地找到错误的来源! 哇。 它是内存调试的辅助工具。 具体来说,当您设置NSZombieEnabled时,只要对象达到保留计数0,而不是将其释放,它就会将自身变形为NSZombie实例。 每当此类僵尸收到消息时,它都会记录警告,而不是以无法预测的方式崩溃或行为。 这样,您就可以调试细微的过度发布/自动发布问题,而无需使用高级工具或在干草堆搜索中费尽心思。 这个名称是一个相当明显的玩法,因为当对象达到保留计数0时,它们通常被视为“死”。在这种设置下,它们继续以奇怪的半衰期存在-既没有生命,也没有死亡。 就像真正的僵尸一样,除了它们的大脑吃得更少。 Q2。 什么是线程清理和静态分析? 线程清理程序将帮助您查找数据争用和其他并发错误。 静态分析器已扩展为搜索可定位性问题,检查为空性以及在MRR代码中查找内存泄漏。 Q3。 什么是延期调用? 编写示例代码? 使用libdispatch,计时器的最简单形式是DispatchQueue.asyncAfter 。 这是“延迟调用”的一种形式,它仅延迟函数但不返回引用,因此不提供取消的可能性。 基本的调用after可能看起来像这样: DispatchQueue.global()。asyncAfter(最后期限:DispatchTime.now()+ .seconds(10)){ //一些延迟的代码 } Q4。 什么是调度源? 调度源是一种基本数据类型,可协调特定底层系统事件的处理。 大中央调度支持以下类型的调度源: 计时器调度源生成定期通知。 UNIX信号到达时, 信号分发源会通知您。 描述符源会通知您各种基于文件和套接字的操作,例如: 当数据可供读取时 何时可以写入数据 在文件系统中删除,移动或重命名文件时 文件元信息更改时 流程调度源会通知您与流程相关的事件,例如: 进程退出时 当进程发出fork或exec类型的调用时 当信号传递到过程时 Mach端口调度源会通知您与Mach相关的事件。 自定义调度源是您定义并触发自己的源。 Q5。 什么是应用程序稀疏? App Store和操作系统通过根据用户特定设备的功能量身定制应用程序交付,从而以最小的占用空间优化了iOS,tvOS和watchOS应用程序的安装。 这种称为应用程序细化的优化,使您可以创建使用最多设备功能,占用最少磁盘空间并容纳Apple可以应用的将来更新的应用程序。 更快的下载速度和更多空间可用于其他应用程序和内容,从而提供更好的用户体验。 切片 切片是为不同目标设备创建和交付应用程序包变体的过程。 变体仅包含目标设备所需的可执行体系结构和资源。 […]

快速面试问题–克里希纳

快速面试问题 1) Swift和Objective C之间的差异 Swift是用于iOS,macOS,watchOS和tvOS应用程序开发的新编程语言。 尽管如此,从您在C和Objective-C方面的开发经验中,Swift的许多部分都会为您所熟悉。 Swift提供了自己的所有基本C和Objective-C类型的版本,包括Int表示整数,Doubleand Float表示浮点值,Bool表示布尔值和String表示文本数据。 Swift还提供了三种主要集合类型(数组,集合和字典)的强大版本。 1. Swift引入了在Objective-C中找不到的高级类型,例如元组(值的分组)。您可以使用元组从一个函数返回多个值作为单个复合值。 2. Swift还引入了可选类型,用于处理缺少值的情况。 可选参数说“有一个值,它等于x ”或“根本没有值”。 它们适用于任何类型,而不仅仅是类。 使用可选选项类似于在Objective-C中对指针使用nil 3. Swift是一种类型安全的语言,如果代码的一部分需要一个String,则类型安全可防止您错误地将其传递给Int。同样,类型安全可防止您将可选的String意外地传递给期望的代码一个非可选的字符串。 类型安全性可帮助您在开发过程中尽早发现并修复错误。 4. Swift更易于阅读:不再需要用分号来结束行或括号,Swift中的方法和函数调用在括号内使用行业标准的逗号分隔参数列表。Swift代码更类似于自然英语 5. Swift易于维护: Swift将Objective-C标头(.h)和实现文件(.m)合并为一个代码文件(.swift)。 6. Swift更安全: 7. Swift与内存管理统一:在目标C中,开发人员有责任通过使用低级API(如Core图形)来管理内存处理。 与Swift中一样,即使在底层API中也无需考虑内存管理。 8. Swift需要更少的代码 9. Swift更快 10.Swift Playgrounds鼓励交互式编码: Playgrounds使程序员能够测试新的算法或图形例程,例如5至20行代码,而不必创建整个iPhone应用程序。 2) 类型安全和类型推断: Swift是一种类型安全的语言。 类型安全的语言鼓励您清楚代码可以使用的值的类型。 如果代码的一部分需要一个字符串,则不能错误地将其传递给Int,它会在编译代码时执行类型检查并将所有不匹配的类型标记为错误。 如果您没有指定所需的值类型,则Swift会使用类型推断来得出适当的类型。 当声明具有初始值的常量或变量时,类型推断特别有用。 3) 什么是类型别名 类型别名为现有类型定义备用名称。 您可以使用typealias关键字定义类型别名。 4) 什么是元组: 元组将多个值分组为一个复合值。 元组中的值可以是任何类型,而不必彼此相同。 元组作为函数的返回值特别有用。 尝试检索网页的函数可能会返回(Int,String)元组类型,以描述页面检索的成功或失败。 通过返回具有两个不同值(每个类型均不同)的元组,该函数提供的结果要比仅返回单个类型的单个值要有用得多。 […]