61.初始化方法

Posted qiangzhevsruozhe

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了61.初始化方法相关的知识,希望对你有一定的参考价值。

    

    1.最常用的初始化
/**

 初始化方法

  @param type 类型

 @return 对象

 */

- (instancetype)initWithType:(EnrollOrderViewControllerType)type

{

    self = [super init];

    if(self)

    {

        self.type = type;

    }

    return self;

}

2. 

initWithFrame:frame //纯代码初始化,由用户调用
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
//当代码中没有用nib时,可以用 if (self =[superinitWithFrame:frame])作为条件限制
//对init:可以自定义方法做初始化
- (instancetype)initWithFrame:(CGRect)frame relCourse:(fRelCourse *)item publicCourse:(NSString *)publicCourse{
if (self = [super initWithFrame:frame]){
self.relCourseItem = item;
self.publicCourse = publicCourse;
[self initSubViews];
}
return self;
}


3.
initWithcoder:aDecoder //从nib中加载对象实例时,由框架调用的
- (id)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
// Initialization code
}
return self;
}
//用nib加载对象实例时:用 if (self =[super initWithcoder:aDecoder])判断,也可以自己添加初始化条件
- (id)initWithCoder:(NSCoder *)aDecoder
{
if ((self = [super initWithCoder:aDecoder]))
{
[self setUp];
}
return self;
}
4. 
awakeFromNib //通过nib文件创建view对象时执行awakeFromNib ,此方法在initWithCoder:之后,在nib文件被加载时调用,此时可以对一些属性重新赋值
- (void)awakeFromNib {
[super awakeFromNib];
//重新赋值一些控件属性
}
5.
initWithNibName: //是延迟加载,这个View上的控件是 nil ,只有到 需要显示时,才会不是 nil
//(默认init方法使用)当需要在init中添加条件时可以重写此方法
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
_isPush = YES;
}
return self;
}
//再通过 initWithNibName来实例化就会默认添加上了 self.isPush = YES;
SelectViewController *selectVC = [[SelectViewController alloc] initWithNibName:nil bundle:nil];


6.
initWithStyle:style reuseIdentifier:reuseIdentifier //指定初始化(一般用作cell中),如果单元格可以复用,则使相同形式的单元格使用相同的重用标识符。
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
self.selectionStyle = UITableViewCellSelectionStyleNone;
[self loadSubViews]; //添加cell中要加载的控件
}
return self;
}
//对应的不从xib加载cell 可以选择使用 awakeFromNib


7.
loadNibNamed方法:即时加载,用该方法加载的xib对象中的各个元素都已经存在(cell中用xib拖入的控件)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *VideoCellID = @"VideoCellID"; //重用标示符
VideoCell *cell = [tableView dequeueReusableCellWithIdentifier:VideoCellID];
if (cell == nil) {
cell = [[NSBundle mainBundle] loadNibNamed:@"VideoCell" owner:nil options:nil].lastObject; //加载的cell是VideoCell文件中的最后一个xib
}
}
















































































以上是关于61.初始化方法的主要内容,如果未能解决你的问题,请参考以下文章

面向对象的使用

Android 关于LayoutInflater类onCreateView方法prefix传入android.view.依然能初始化成功原生控件的问题

Android 关于LayoutInflater类onCreateView方法prefix传入android.view.依然能初始化成功原生控件的问题

[C#]变量初始化问题:字段初始值无法引用非静态字段方法或属性

关于防抖节流方法

面试题06