ios - 为什么 UIView 会同时调用 init 和 initWithFrame?

标签 ios objective-c uiview

我注意到,当我重写 UIView 子类中的 initinitWithFrame: 时,这两个方法都会被调用。即使在我的代码中只有一个被显式调用:

TestViewController.m:

@implementation TestViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    View1 *view1 = [[View1 alloc] init];
    [self.view addSubview:view1];
}

@end

View1.m:

@implementation View1

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self)
    {
        NSLog(@"initWithFrame");
    }
    return self;
}

- (id)init
{
    self = [super init];
    if (self)
    {
        NSLog(@"init");
    }
    return self;
}

@end

控制台看起来像这样:

2013-10-17 12:33:46.209 test1[8422:60b] initWithFrame

2013-10-17 12:33:46.211 test1[8422:60b] init

为什么initWithFrame在init之前调用?

最佳答案

这不是问题。在 UIView 的情况下, [super init] 调用将自动更改为 [super initWithFrame:CGRectZero] 。因此,您必须牢记这一点来维护此代码。

关于ios - 为什么 UIView 会同时调用 init 和 initWithFrame?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19423182/

相关文章:

ios - UITableViewController 自定义单元格中缺少 UIButton 默认点击淡入淡出动画

ios - 切换标签后出现黑屏

objective-c - iOS 多 View 应用程序

ios - 更改旋转时嵌入的 UITextView 宽度?

ios - 与 VPN 服务器协商失败(NEVPNProtocolIPSec、Swift 3.0.2)

objective-c - 释放对象添加到核心数据?

ios - 无法从黑色更改 UIView 背景颜色

ios - 用于实时消息传递的 WKExtension 状态和 sendMessage

IOS Xcode Storyboard : Inserting a view behind already placed views

ios - 在我的 iOS 应用程序中,如何设置铃声(默认电话)、闹钟(默认闹钟)、默认通知、联系人……?