iOS UIView 创建是不是都会经过initWithFrame?

是不是不管在哪个版本?不管是通过代码创建还是xib界面创建?initWithCoder?

UIView的最原始第一次创建的方法还是initWithFrame?
initWithFrame就是UIView最基础的创建方法吗?

因为今天调用init的时候发现调用了initWithFrame.
而我需要的就是当前继承UIView的类在创建对象时,有一个初始化的方法,并且该初始化方法对于当前对象来说只能调用1次。不能多!!。并且是最早被调用的。

有什么真正的好方法呢?
1.dispatch_once_t??应该是对于单例来说的吧
2.自己设计一个标记位?自己加锁?
3.还是说目前只有这1个或者2个规定的基础的初始化方法呢?
4.NS_DESIGNATED_INITIALIZER 我看文档

  • (instancetype)initWithFrame:(CGRect)frame NS_DESIGNATED_INITIALIZER;

  • (nullable instancetype)initWithCoder:(NSCoder *)aDecoder NS_DESIGNATED_INITIALIZER;
    这两个方法,返回的有点区别,但是NS_DESIGNATED_INITIALIZER又是什么意思呢?

阅读 3.8k
1 个回答

UIView的init的方法里调用了initWithFrame,但是initWithFrame也是调用的UIResponder的init。
不明白初始化方法只能调用一次的场景是什么。

至于NS_DESIGNATED_INITIALIZER
是标记一个特定的初始化方法,子类的重载时需要调用这个方法。
同一个类的初始化方法需要调用这个特定的初始化方法。
一个有特定初始化方法的类需要实现父类的特定初始化方法。
摘自http://stackoverflow.com/questions/26185239/ios-designated-initializers-using-ns-designated-initializer

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏