我读过你不应该在初始化期间向“自我”发送消息。不幸的是,您不能直接访问属于您的超类的 ivars(据我所知)。这导致您需要以某种方式访问/设置超类 ivar,但除了消息传递之外别无他法。(作为参考,我正在编写自定义 UIControls 来封装应用程序中的重复概念;虽然很多逻辑是共享的,因此属于超类,但每个控件的确切布局需要有所不同)。
例如,自定义控件需要有一个按钮。根据所讨论的子类,与视图中的其他对象相比,该按钮的排列方式不同,因此我需要参考它进行布局。据我所知,与 ViewControllers 不同,UIView 没有任何回调来让您了解诸如“willAppear”或“didLoad”之类的生命周期事件;init 是唯一放置代码的地方——我读过的关于创建自定义 UIControls 的教程也把它放在那里。
我是误会了什么,还是我别无选择,只能在我的场景中违反有关消息自我的规则?(或者创建一个必须在 init 之后调用的额外方法......创建一个新约定,基本上是说'首先你初始化,然后你真的初始化'!)