iOS面试问题

翻译来源:https://medium.com/@abhimuralidharan/ios-interview-questions-736e27a96a74


1、Objective-c中有扩展吗?

有。

2、objective C中类别和扩展有什么区别?

可以为任何类声明一个类别,即使您没有原始的实现源代码。

类别和扩展具有一些相似之处,但是只能在类编译时间添加扩展。

类别允许你在主接口文件以外添加方法。然而扩展必须在主接口文件中实现。意味这可以推断出不能为内建类或者你不知道源代码的类声明扩展,这时候你应该使用类别。当你需要访问类代码时可以使用扩展。

0.jpg

3、swift中控制流关键字

Swift中switch语句不会进入每一个情况的底部而进入下一个情况。这样整个Switch语句执行完成很快第一个匹配情况就会完成。

swift中fallthrough语句是基于需求执行案例语句直到找到符合情况的语句。

“case 4” is also executed even though it doesn’t match the criteria

fallthough关键字不会为switch情况检查引起执行结束的案例条件。fallthrough关键字仅仅调用代码向下执行语句(或默认情况)闭包,和C语言标准的switch语句行为一样。

4、swift中如何在协议中声明一个可选方法?

有两种方式。

纯粹的swift方式可以使用protocol extension 提供默认实现。

oc兼容方式使用@objc和optional关键字

1.jpg

注意:oc的缺点:兼容方式就像上面例子MyProtocolObjc变成一个类的协议.结构体无法遵守这个协议。

2.jpg

错误:SomeStruct类型无法遵守类协议"MyProtocolObjc"

5、写一个函数实现不使用反转函数反转一个字符串

面试的时候如果让你在纸上写代码,那真的是很扯。

第一个想到的写到纸上的方法如下:

3.jpg

你可以使用高阶函数“Reduce”来实现。

4.jpg

6、解释UIButton的类层级。

NSObject → UIResponder → UIView → UIControl → UIButton.

UITextField, UITextView, UISlider, UIDatePicker, UIPageControl, UISegmentedControl, UIStepper, UISwitch 等都继承自UIControl。

每个父类的职责和角色是什么?

UIResponder: 响应和处理事件的抽象类。响应者会实现 touchesBegan(_:with:)touchesMoved(_:with:), 第一响应者处理键盘和输入相关事件等。

UIView: 屏幕中管理内容的一个矩形区域

UIControl: 控制器的基础类。

*处理控制器状态例如:启用,不可用,聚焦,高亮等。

*处理事件例如:触摸,点击,值更改,输入框的编辑等等。

*添加事件,移除事件,处理事件等。

7、UIViewController的父类 

UIResponder → UIViewController

8、UIWindow的父类

UIView → UIWindow

9、一个iOS应用有多少个窗口?

一个应用一次仅有一个活跃的窗口

苹果文档:每一个应用程序最少一个窗口展示应用用户界面在设备主屏幕。如果额外展示连接设备,应用也可以创建第二个窗口展示内容在屏幕。

10、swift中Self 与self的区别

Self仅在代理或在类中一个方法的返回结果中可用。

当你编写代理和扩展代理时,这里Self和self是不同的。当使用Self遵守代理的类型引用,比如String 或Int。当使用小写self是类型的值引用,比如:“hello”或556.

注意: BinaryInteger 是一个协议。

extension BinaryInteger { 

    func squared() ->Self{ returnself*self}

}

11、Swift类中静态方法/变量和类方法/变量的区别?

在类中静态和类都是关联方法或属性的,而不是关联类的实例。不同之处在于子类能重载类方法;不可以重载静态方法。因此在类里,静态方法关键字写法如下:

final class someFunction()

因此,静态是内部最终。

静态方法是静态派遣意味着编译器知道,作为静态方法在运行时会被执行时是不能被重载的,除非类方法作为一个动态分配是可以被子类重载。

12、解释final关键字是如何保护在子类中被重载的?

通过标记为final可以免于方法、属性、脚注重载。通过final的修改方法、属性、脚注之前的介绍关键字(像这样final var, final func, final class func, and final subscript).

你可以通过写final修改class之前的关键字,标记一个内部类作为最终。任何企图去修改继承自final类的子类编译器都会报错。

如前面提到的,你也可以使用static关键字它具有final class的功能。

引用:StackOverflow

5.jpg

13、分别解释OC和swift中的原子性

oc中默认值为原子性

Swift中默认值为非原子性

定义一个属性为原子性将会保证返回一个有效值。声明属性为原子性编译器会生成额外代码保护当前对属性的操作。此额外的代码锁定了信号质量,然后获取或设置属性,然后解锁信号。如果线程A调用获取的同时线程B和C调用设置不同的值,线程A可能会得到其中优先调用设置的值或者任意其中在线程B和C中传递到设置方法的值之一。同样的,这个对象可能以来自B或C中的值结束,无从知晓。

由于在设置/获取值之前和之后的锁定和解锁,原子属性遭受的性能影响较小。

非原子操作属性对与返回的值没有保障的。它可能是正确的值,部分被修改的值或甚至是一些垃圾值。

Swift中没有atomic/non-atomic关键字。当多个线程试图访问同一个值时,我们应该使用锁或信号等确保属性的原子性。

原子性属性(原子性和非原子性)是没有影响的在相应的swift属性声明中,但是从Swift访问导入的属性时,Objective-C实现的原子性保证仍然有效。

14、什么是单例模式?如果在swift创建一个单例?

在应用的整个生命周期中只能存在一个单例。单例的存在为我们提供了单一全局状态。例如:NSNotificationCenter, UIApplication, 和 NSUserDefaults。

final class Singleton {

static let sharedInstance = Singleton()

private init() {} // init should be private

}

任何使用let关键字声明的变量都是常量,因此只读和线程安全。

静态关键字确保它是内部是只会初始化一次的懒加载模式。静态默认是内部最终。

dispatch_once: 执行一个闭包对象一次并且在应用生命周期只有一次。

确保初始化方法是私有的,这样就没人可以直接访问init()方法和创建一个新的单例类。

15、枚举可以有存储属性吗?

枚举可以有方法、脚注和计算的属性。但是不能存储属性。

16、你可以在没有付费的开发者账号的情况下安装iOS应用到一个真机吗?

是的,你可以,但是在苹果开发平台不注册,你的应用将只能使用7天在你的设备上。之后,你必须使用Xcode重新部署它到设备上。如果注册苹果开发者,不会有这种麻烦。

17、可以把let作为weak吗?

不,‘weak’必须是一个可变的变量,因为它可能会改变在运行时。当我们声明一些变成weak,它可能会有一个值或不会有。一旦没有引用指向它,就会被设置为nil.

classSomeClass { }

classSomeOtherClass {

weak let someClassObj: SomeClass? = nil

// error: 'weak' must be a mutable variable, because it may change at runtime}

18、可以把let作为unowned?

可以,unowned引用总会有一个值。非可选。

注意:UNOWEND引用可以是一个let 或var。

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