IOS面试常见问题解答(2018年8月)第2部分
Q1。 为什么@ property / @ synthesize不存在?
Swift不区分属性和实例变量(即属性的基础存储)。 要定义属性,只需在类的上下文中声明一个变量。
如果您有使用Objective-C的经验,您可能会知道它提供了两种将值和引用存储为类实例的一部分的方法。 除了属性之外,您还可以将实例变量用作存储在属性中的值的后备存储。
Swift将这些概念统一为一个属性声明。 Swift属性没有相应的实例变量,并且不能直接访问该属性的后备存储。 这种方法避免了在不同的上下文中如何访问值的困惑,并将属性的声明简化为单个确定的语句。 有关属性的所有信息(包括名称,类型和内存管理特性)都在单个位置中定义,作为类型定义的一部分。
Q2。 如何实现可选功能?
可选在Swift中作为enum
类型实现。
有关如何完成此操作的示例,请参阅Apple的Swift Tour:
枚举OptionalValue {
情况无
案例Some(T)
}
Q3。 声明一些常量变量并在创建该类的实例期间进行初始化?
对于类实例,只能在引入常量的类的初始化期间对其进行修改。 子类不能修改它。
您可以在初始化期间的任何时候为常量属性分配一个值,只要在初始化完成时将其设置为确定值即可。 为常量属性分配值后,就无法再对其进行修改。
Q4。 定义一个变量,并在设置该变量时将其保留计数增加4,您将如何做?
var vc1:NSDate? = NSDate()
print(CFGetRetainCount(vc1))// 2-我期望它是1,因为只有一个变量强烈引用此对象。
var vc2:NSDate? = vc1
print(CFGetRetainCount(vc1))// 3-参考计数增加1(强参考)
var vc3:NSDate? = vc2
print(CFGetRetainCount(vc3))// 4-参考计数增加1(强参考)
Q5。 为什么网点薄弱?
苹果公司在其示例代码中使用的最常见的一种代码遵循以下模式:
@IBOutlet私有弱变量someLabel:UILabel!@IBOutlet私有弱变量someLabel:UILabel?@IBOutlet私有弱变量someLabel:UILabel?
这些示例均遵循3条简单规则:
-
!
需要视图存在的保证,因此请始终使用strong
提供该保证 - 如果有可能该视图不属于视图层次结构,请使用
?
和适当的可选处理(可选绑定/链接)以确保安全 - 如果从视图层次结构中删除视图后不再需要该视图,请使用
weak
以便将其从内存中删除。
类型限定符IBOutlet
是应用于属性声明的标记,以便Interface Builder应用程序可以将该属性识别为出口,并将其显示和连接与Xcode同步。
Q6。 您将如何修改init函数中的let变量?
类Point {
令x:整数
令y:整数
init(x:Int,y:Int){
self.x = x
self.y = y
}
}
令p1 = Point(x:1,y:1)
Q7。 如何定义隐式展开的可选内容?
当我们定义一个隐式展开的可选内容时,我们定义了一个容器,该容器在每次读取它时都会自动执行力的展开。
var文字:字串! =“你好”
如果现在我们读text
让名字=文字
我们没有可选String
而是普通String
因为text
自动解开其内容。
但是文本仍然是可选的,因此我们可以在其中放置一个nil
值
文字=无
但是,一旦我们读到它(并且包含nil
),就会收到一个致命错误,因为我们正在展开一个包含nil
的可选内容
让anotherName = textfatal错误:展开可选值时意外发现nil
转到2018年您必须准备的iOS面试热门问题
希望您喜欢这篇文章,并且对希望找出最近问到的iOS面试问题的人有用。请❤️将这篇文章推荐给其他人😊。 让我知道您的反馈。 🙂