「iOS 面试之道」勘误(二)

栏目: IOS · 发布时间: 5年前

内容简介:书中 105 页的描述是:Swift 初始化方法必须保证所有非这个表述是不严谨的。Swift 初始化方法必须保证:

书中 105 页的描述是:Swift 初始化方法必须保证所有非 Optional 的成员变量都完成初始化。

这个表述是不严谨的。

Swift 初始化方法必须保证:

  • 所有非 lazy /非 Optional 的可变 stored property
  • 所有非 computed 不可变 stored property

都完成初始化。其中 stored property 的对义语是 computed property。

也就是说下列代码是不能被成功编译的,因为 bar 虽然是 Optional 的,但是确实一个不可变成员变量:

class Foo {
    let bar: String?
    
    init() {
        
    }
}
复制代码

但是下列代码又是可以被成功编译的:

class Foo {
    let bar: String = {
        return "Bar"
    }
    
    init() {
        
    }
}
复制代码

因为上述代码的 bar 是一个 computed property,而不是 stored property。

如果你觉得上述描述实在太难记,那么只需要记忆以下内容:Swift 会强制所有 不可变变量 以及 可变变量中非 optional 的 在变量生命周期的「产生」阶段都被初始化。这个「产生」阶段对于 classstruct 的 properties 而言就是 init 函数,对于全局变量和函数体内的本地变量而言就是变量声明的时候。

Swift 和 Objective-C 的自省描述有问题

书中 109 页:

... 这两个方法( [NSObject -isKindOfClass:][NSObject -isMemberOfClass:] )的使用有一个前提,既 obj 必须是 NSObject 或其子类。

这个表述是有问题的, -isKindOfClass:-isMemberOfClass: 是定义在 NSObject 这个 protocol 之中的,只要遵从 (conformed to) 了这个 protocol 那么你就可以使用这两个方法来进行自省,比如说 NSProxy 及其子类。

实际上 Objective-C runtime 也提供一组 API 来完成类似的功能,只是这组 API 中有些有可以不检查 class hierarchy。你如果构建过用来扩展 Objective-C 运行时的框架,那么你应该会很熟悉。

iOS 动画实现方式记录不完全

iOS 动画还包括 CADisplayLink 驱动的动画,比较有名的使用这个类来驱动动画的 iOS UI 组件就有 LTMorphingLabel 。另外有很多游戏或者三维程序也是用这个类来驱动的。

同时 UIScrollView 也是 iOS 上动画的重要来源,而且用这玩意儿做动画比较考验智力水平。基本上每年苹果都会在 WWDC 开专门的 sessions 讲如何使用 UIScrollView 及其子类。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

冷启动

冷启动

高臻臻 / 人民邮电出版社 / 2018-5 / 59.80元

本书针对中小企业做营销没预算、没用户的痛点,系统梳理冷启动项目的思维和策略,帮助营销和运营人员实现项目从0到1再到n的爆发式增长。 全书有两条主线。一条是营销思维线,侧重于如何思考,包括:升级行业、创新文化,寻找营销切入点;挖掘品 牌和个人的亮点、“做轻”产品,打造具有互联网营销特色的冷启动项目;突破思维,把实体经济“做虚”,发挥虚拟经济的价值。另一条是营销策略线,侧重于如何行动,包......一起来看看 《冷启动》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

URL 编码/解码
URL 编码/解码

URL 编码/解码