UITableViewController 指定初始化器的问题

UITableViewController 指定初始化器的问题

💡 原文英文,约500词,阅读约需2分钟。
📝

内容提要

苹果在Xcode 61中引入了NS_DESIGNATED_INITIALIZER标志,增强了初始化器的调用顺序,特别是在Swift中。iOS 8.3对UITableViewController进行了修改,使initWithStyle:成为指定初始化器,但增加了其他初始化器,导致子类化不便。为防止错误调用,建议将其标记为不可用。尽管有改进,UITableViewController的初始化顺序仍存在问题,可能影响应用稳定性。

🎯

关键要点

  • 苹果在Xcode 61中引入了NS_DESIGNATED_INITIALIZER标志,增强了初始化器的调用顺序,特别是在Swift中。
  • iOS 8.3对UITableViewController进行了修改,使initWithStyle:成为指定初始化器,但增加了其他初始化器,导致子类化不便。
  • 为了防止错误调用,建议将不必要的初始化器标记为不可用。
  • 尽管有改进,UITableViewController的初始化顺序仍存在问题,可能影响应用稳定性。

延伸问答

NS_DESIGNATED_INITIALIZER标志的作用是什么?

NS_DESIGNATED_INITIALIZER标志增强了初始化器的调用顺序,特别是在Swift中,帮助防止初始化链的破坏。

UITableViewController的指定初始化器有哪些?

UITableViewController的指定初始化器包括initWithStyle:、initWithNibName:bundle:和initWithCoder:。

为什么建议将不必要的初始化器标记为不可用?

建议将不必要的初始化器标记为不可用,以防止用户错误调用,确保子类化的正确性。

UITableViewController的初始化顺序存在哪些问题?

UITableViewController的初始化顺序问题可能导致应用的不稳定性,特别是在调用链不符合预期时。

如何处理UITableViewController的初始化问题?

可以通过将实现包装在clang诊断块中,忽略相关警告来处理初始化问题,但这并不能完全防止错误状态的创建。

iOS 8.3对UITableViewController的修改有什么影响?

iOS 8.3的修改使initWithStyle:成为指定初始化器,但增加了其他初始化器,导致子类化变得不便。

➡️

继续阅读