美文网首页iOSiOS开发xib,storyboard,autolayout
关于用代码实例化对象与xib实例化文件调用方法的不同

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

作者: Top_熊 | 来源:发表于2015-05-31 00:37 被阅读3021次

相信大部分接触过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 = @"商品";
}

文章比较短,希望可以帮助到遇到此问题的朋友

相关文章

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

    相信大部分接触过xib与storyboard的开发者都对俩者描述控件赞不绝口,俩者的出现大大降低了开发者开发的时间...

  • 关于spring,总结了一篇上万字的图文笔记,不管你工作几年都应

    spring bean的实例化 构造器实例化 静态工厂实例化 容器创建对象,不直接调用对象构造方法,而是调用静态工...

  • iOS加号和减号函数的区别

    加号 是可以通过类名直接调用这个方法, 而减号则要实例化逸个对象,然后通过实例化的对象来调用该方法! (+ 和ja...

  • iOS + -

    +是类方法,-是对象方法. + 是可以通过类名直接调用这个方法, - 则要实例化一个对象,然后通过实例化的对象来调...

  • c++基础(this)

    属性和方法属于类,在类实例化过程后this是指向类型实例化后的对象。想要调用类静态方法以外的方法需要先对类型实例化...

  • Webpack的构建流程

    初始化配置对象,创建compiler对象实例化插件,调用插件的apply方法,挂载插件的监听从入口文件执行编译,按...

  • Java 基础

    类和对象 对象:对象是类的一个实例,有状态和行为。 创建对象:声明,new 实例化,调用构造方法初始化对象。 类:...

  • 接口,工厂模式,IOC,SpringBoot

    接口 单纯的Interface可以统一方法的调用,但是它不能统一对象的实例化。只有一段代码不负责对象实例化,才能保...

  • TP框架中的A方法

    通过A方法跨模块调用操作 A方法用于实例化其他模块(当于new关键字),模块被实例化之后,就可以以对象的方式调用模...

  • 实例方法和类方法

    实例方法(-修饰): 只能用对象去调用,即调用方必须是被实例化后的对象。一般使用的方法。 类方法(+修饰) 使用这...

网友评论

  • 794383cae033:请问在用swift中的情况下是怎样的呢
    Top_熊:@嘻哈peter 一样的
  • iOS_愛OS:不错,每天看简书首页,感觉简书都被程序员给占领了,尤其是iOS

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

本文链接:https://www.haomeiwen.com/subject/getdqttx.html