关于用代码实例化对象与xib实例化文件调用方法的不同

本文深入探讨了使用代码实例化对象与XIB加载对象的异同,详细解析了各自的方法、注意事项及应用场景,旨在帮助开发者提高效率并优化UI开发流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

相信大部分接触过xib与storyboard的开发者都对俩者描述控件赞不绝口,俩者的出现大大降低了开发者开发的时间,不用在设置UI浪费大量的时间和维护臃肿的代码,本文来说一说用代码实例化对象和xib实例化对象系统调用方法的不同

用代码实例化对象
  • 对于用代码实例化一个控件(CustomView)所需要的代码如下

CustomView *customView = [[CustomView alloc] init];
此时系统会调用对象的init方法,如果开发者需要在对象初始化时给对象的属性赋值就在对象的init方法中写入即可,如下
- (instancetype)init
{
if (self = [super init]) {
   self.backgroundColor = [UIColor blueColor];
   self.alpha = 0.5f;
   self.shopsLabel.text = @"商品";
}
return self;
}
需要注意如果创建对象是通过initWithFrame方法是不会调用init方法
的,系统会自动调用initWithFrame方法,而通过init方法创建对象也
会调用initWithFrame方法

通过xib加载对象
  • 用xib实例化对象方法需要注意Xib的文件名最好与文件的名字相同
[[[NSBundle mainBundle] loadNibNamed:@"CustomView"
owner:nil options:nil] lastObject];

此时系统会自动调用initWithCoder:aDecoder方法来初始化对象,而此时如果在initWithCoder:方法中设置对象属性
- (instancetype)initWithCoder:(NSCoder *)aDecoder
{
if (self = [super initWithCoder:aDecoder]) {
    self.backgroundColor = [UIColor blueColor];
    self.alpha = 0.5f;
    self.shopLabel.text = @"商品";
}
return self;
}
此时会发现对内部shopLabel.text设置没有作用。因为对象内部控件还没有实例化(也就是还没有被连线)需要在Xib文件加载完毕后才可以设置,解决方法是在awakeFromNib设置参数属性,如下
- (void)awakeFromNib
{
self.shopLabel.text = @"商品";
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值