iOS 关于构造方法一点知识

构造方法

1.什么是构造方法?

初始化对象的方法.

默认情况下,在 OC 当中创建1个对象分为两部分(new 做的事):

+alloc:分配内存空间

-init :初始化对象

2.构造方法的作用是?

用作初始化对象的成员变量.

把 C 语言指针初始化为 NULL

把 OC 对象初始化为 nil

把基本数据类型初始化为0

3.构造方法的书写格式是?

- (instancetype)init

{

self = [super init];

if (self) {

<#statements#>

}

return self;

}

构造方法的结构很重要.

第一步,调用指定的父类初始化函数.该初始化函数返回父类对象的一个经过初始化的实例.

第二步,把返回回来的实例必须将其赋值给特殊的变量 self.

第三步,如果在初始化过程中出现任何问题,初始化函数的协议指定返回一个 nil对象,而不是一个有效的初始化对象.因此,在将父类的初始化函数返回值赋值 self 后,必须检查 self 是否是 nil. 如果是,就不想要初始化自身的变量了,返回 nil 即可.上面的事例中,我们在 if 语句中将变量赋值给 self 并检查它是否是 nil.

第四步:构造方法的真正目的除了创建 self 外,还用于初始化对象中的所有数据成员.因此在验证 self 不是 nil 后,就可以初始化变量了.在初始化变量后,就可以从初始化方法中返回 self.

疑问:在学习和使用构造方法时,我一直心里有个疑问:为什么 self = [super init];苹果官网对此没有明确的说明,所有的一切都是开发者的猜测.

下面是我对此经过多次测试,所得到结果的猜测:

1.第一点,[super init],之所以调用父类的 init 方法,是因为如果子类重写了定义在父类当中的方法,在子类执行过程当中,就不会执行父类当中的该方法.而面向对象编程的最主要特点之一就是:谁的事情,谁去做.子类当中,继承了父类的所有可继承的成员变量,那么该些成员变量就应该是父类自己去初始化,而不应该子类替代父类去做初始化操作.所以此处需要调用父类的构造方法.

2.第二点,也就是难点,为什么要将父类初始化后的实例对象赋值给子类当中的 self ???这才是我疑惑非常久的问题.

猜测1.调用父类的初始化方法,肯定要返回一个对象,那么这个对象用谁去接收?应该看 super 当前代表的是谁,是什么类型来确定.

猜测2.如果父类初始化失败,在子类当中没有值接收,就没有办法进行把控,所以要赋值给一个当前对象.

// 作用:初始化成员变量

-(instancetype)init

{

// 1.调用父类的初始化方法,进行初始化子类继承自父类的成员变量.

self = [super init];

// 问题:这里要返回一个初始化好的实例对象,那么用什么来接受这个对象???

// 1.1.用父类?

// 1.2.用子类本身?

// 结论:NSLog(@"super-%@",super.class);super 是本类对象,所以用 self 接受

// 3.因为调用父类初始化方法,可能初始化成功,可能初始化失败,那么如果初始化失败,就不应该继续下面的操作

if (self) {

// 3.1.如果父类初始化成功,下面开始初始化子类成员

_name = @"码奴!";

}

// 4.返回已经初始化好的对象

return self;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,509评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,806评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,875评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,441评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,488评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,365评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,190评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,062评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,500评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,706评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,834评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,559评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,167评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,779评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,912评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,958评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,779评论 2 354

推荐阅读更多精彩内容

  • 20- 枚举,枚举原始值,枚举相关值,switch提取枚举关联值 Swift枚举: Swift中的枚举比OC中的枚...
    iOS_恒仔阅读 2,278评论 1 6
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 3,805评论 1 10
  • 官方文档 初始化 Initialization是为准备使用类,结构体或者枚举实例的一个过程。这个过程涉及了在实例里...
    hrscy阅读 1,136评论 0 1
  • 在微博上看了一个关于器官捐献的视频,以一位器官捐献协调员的身份讲述捐献案例,侧重点在于回天无力后家属们的痛苦抉择。...
    木归门阅读 208评论 0 1
  • 为了把孩子培养成大脑的主人,要相信孩子的大脑是一个完整的客观存在。也就是说承认孩子是一个独立的人性个体,其具有无限...
    金勇Maya阅读 197评论 0 1