黑马程序员——OC基础---构造方法

18006.STM32通过SPI读取LAN9253数据 【代码】18006.STM32通过SPI读取LAN9253数据。 阅读详情

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------



构造方法(init方法)在OC中是使用非常频繁的方法,构造方法的本意就是对对象进行构造(对对象的实例变量进行初始化),因为是对对象的实例变量进行初始化,所以是并且只能是对象方法,以‘-’开头。

构造方法的举例如下
例
Dog *d = [[Dog alloc]init];
其中alloc表示分配控件,init  即为构造方法表示初始化,init继承自NSObject。


由于这是系统自动进行的初始化,所以初始化的值往往不是我们想要的(对象类型:系统自动初始化为nil,基本类型:系统自动初始化为 0),所以在实际应用中我们常常重写或者自定义构造方法,重写构造方法的官方文档推荐写法为:

- (id)init {
    self = [super init];
    if (self) {
        //Initialize self.
    }   
    return self;
}</span>
[super init]的作用:

面向对象的体现,先利用父类的init方法为子类实例的父类部分进行属性初始化,初始化完成之后反回当前对象的指针。因为不管是什么类,其基类(或者称根源类)一定是NSObject,所以要像获得基类的属性方法就一定要用 super 来获得父类(实际使用中的类未必直接继承至NSObject,可能是其父类甚至爷爷类继承至NSObject)的init方法。

if语句的作用
调用[super init]时可能会alloc失败,所以我们通过判断self ! =nil 来决定是否执行下面的初始化操作,如果为nil 实例创建失败,终止if内的语句执行。



例:Person类的init方法重写

- (instancetype)init{
    self = [super init];
    if (self) {     
        //此处写子类初始化的内容
        _age = 10;       
    }  


上方代码即为,我每创建一个该类的对象,它的age属性就默认为10

如果我们有一个继承Person 的子类Student,并且Student有另外一个属性stuNum,我们想给stuNum自动初始化另外一个值怎么办呢?

例

-(instancetype)init{
    self = [super init];//调用父类Person的init方法,会先把继承的age属性初始化为10
    if(self){
    _stuNum = 1;
    }   return self;
}

看到这里应该会有人奇怪,为什么官方推荐的是-(id)开头,而我的例子却全是-(instancetype)开头呢,这里就涉及到id和instancetype的差异了,简单的说,id是旧时代的东西,instancetype是新时代的东西,他们都可以返回一个对象类型,在此处的区别在于id返回的是未知的对象类型,instancetype返回的是所在类的对象类型,高下立判,所以在此处请尽量使用instancetype类型。


虽然重写构造方法可以达到一定意义上的按我们所构想的那样去初始化值,但仍不够完美,实际情况中我们经常遇到用接收的值去进行初始化,这就要进行构造方法的自定义了。


构造方法的自定义严格来说就是一个新的对象方法,只不过我们给了它初始化实例变量的功能。

注意:即便我们自定义了构造方法,原构造方法init仍然存在,我们仍可调用它。

自定义构造方法与重写构造方法的不同在于方法名和参数的不同,其他必须严格相同,自定义构造方法命名一般为“initWith***”

例

- (instancetype)initWithDict:(NSDictionary *)dict{
    if (self = [super init]) {       //注:此处将 self=[super inti]; 与if内的判断写在了一起

        self.name = dict[@"name"];
        self.icon = dict[@"icon"];
    }
    return self;
}

该方法为一个自定义的构造方法,功能是将字典内的数据转为模型(即将字典的数据用类的对象来存储,更方便于操作和拓展)。

13、超声断层乳腺图像融合算法:乳腺癌诊断新突破 本文介绍了一种新型超声断层乳腺图像融合算法,通过结合超声透射(UTTc、UTTα)和反射断层图像(URT),实现对乳腺组织的多参数自动可视化。该算法能有效区分良性与恶性肿瘤,具有高准确性、无辐射、低成本等优势,适用于大规模乳腺癌早期筛查。初步临床测试验证了其可行性,未来有望成为乳腺癌诊断的新标准。 阅读详情

相关推荐

22AP10 SS524 平替 海思HI3521DV200 可提供开发资料

入,突破了数字接口的视频输入性能瓶颈,提供两倍于前代产品的视频输入能力。视频编解码引擎、视频图像处理的算法效果及性能得到了进一步提升。芯片为客户产品提供了高性能、优异图像质量。推理引擎,支持多种智能算法应用。合丰富的外围设备及高速接口,该。解决方案,广泛用于模拟高清。产品应用开发的新一代专。四核处理器和性能强大的。

szhorsway的博客 1011

黑马程序员_OC构造方法

构造方法:用来初始化对象的方法,是个对象方法,以-开头

suiyuan78223的专栏 729

部署资源管理系统chemx

资源管理系统的部署教程

weixin_40784215的博客 823

黑马程序员——【OC】构造方法概述

------- android培训、java培训、IOS培训期待与您交流! ---------- OC中的构造方法: 1.首先举个例子来说明:通常情况下我们创建一个对象我们会用到语句,这里我们创建一个Person对象: Person *p = [Person new]; 这里的new是一个类方法,完整的创建一个可用的对象,我们需要两个步骤: ①分配存储空间    (用类方法

Damson 469

【ES】--Elasticsearch的分词器深度研究

分词器是ik_max_word,会将“龙马家书”拆分为“龙马”、“马家”、“家书”。然后filter配置的是edge_ngram_filter,在上面拆分的token词组基础上,按照edge_ngram_filter规则进一步拆分。从结果看:分词器是keyword,filter支持edge_ngram_filter,字符过滤器支持tsconvert【简繁体】。分词器是keyword,表明是不进行分词,但filtet中edge_ngram_filter是按照布长方式拆分token,所以得到如此结果。

寻梦友的博客 2450

基于STM32设计的老人监护系统(OneNet)_118

该项目是基于STM32设计的老人监护系统。本系统可以通过脉搏心率传感器,体温传感器检测老人的脉搏状态,体温状态,把老人的数据状态在STM32单片机内部进行处理,然后通过GSM模块上传到OneNet云平台,在通过可视化界面显示出来,这样可以让子女随时随地了解到老人现在的身体情况,以便对老人的突发情况能够做出及时的预防和处理。而且如今,随着老人年纪不断的增长,身体体质不断的衰弱,在上楼梯或者走斜坡的时候很容易会发生摔倒或跌倒,如果不及时的接收到治疗,很可能会造成很严重的后果。

7456

黑马程序员——OC—构造方法和Category

OC第三篇—id类型和构造方法     一、id类型:     1. 本质:id类型是指针。     2.作用:万能指针,能指向任何OC对象,相当于NSObject *.     3. 使用示例:    id p = [Person new];      代码示例: #import #import "Person.h"   int main(int argc, co

wu417284911的专栏 420

智能车图像处理1-基础图像规格

从厂家摄像头的库函数中,我们可以直接得到完整图像的灰度数组,经过二值化之后(算力允许,可以考虑大津法),就是我们要处理的0-1二值图像了。本系列所有的文章中,我们的图像规格如下。

taiyuezyh的博客 4345

——黑马程序员——OC中构造和重写构造方法

-----------android培训、java培训、java学习型技术博客、期待与您交流!-----------

yhp1095785221的博客 521

DBC中如何实现报文传输类型属性的配置

AUTOSAR中CAN报文的传输类型主要有三种,周期型,事件型和混合型。周期型:按固定时间间隔自动发送,无需额外的触发条件。事件型:当信号值变化或满足内部条件时立即发送。混合型:默认按周期发送,但事件触发时可提前发送。

sunchengl的博客 306

AUTOSAR 3万字面试题全面解析(持续更新)

ECU抽象层(EAL)是AUTOSAR架构中的一部分,它位于微控制器抽象层(MCAL)之下,但通常与MCAL一起被提及。EAL的目标是提供一个统一的接口来访问和管理ECU(Electronic Control Unit,电子控制单元)的硬件资源,包括处理器、存储器和外围设备。通过这种抽象,EAL使得上层软件能够以一种标准化的方式与ECU硬件交互,而不需要关心具体的硬件实现细节。EAL解决了硬件异构性带来的问题,即不同ECU可能采用不同类型的处理器和硬件配置。

大模型大数据攻城狮的专栏 5613

黑马程序员————OC的构造方法与分类知识点总结

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- OC语言构造方法: 用来初始化对象的方法,对象方法,以减号开头 为了让对象创建出来,成员变量就会有一些固定的值 重写构造方法的注意点: 先调用父类的构造方法([super init]) 再进行子类内部成员变量的初始化 构造方法的调用:

whymerain的专栏 452

多智能体强化学习算法【三】【QMIX、MADDPG、MAPPO】

相关文章: 1.QMIX算法简述 QMIX是一个多智能体强化学习算法,具有如下特点: 1. 学习得到分布式策略。 2. 本质是一个值函数逼近算法。 3. 由于对一个联合动作-状态只有一个总奖励值,而不是每个智能体得到一个自己的奖励值,因此只能用于合作环境,而不能用于竞争对抗环境。 4. QMIX算法采用集中式学习,分布式执行应用的框架。通过集中式的信息学习,得到每个智能体的分布式策略。 5. 训练时借用全局状态信息来提高算法效果。是后文提到的VDN方法的改进。 6. 接上一条,QMIX设计一个神经网络来

丨汀、的博客 5472

黑马程序员——OC基础——构造方法

-----------android培训、java培训、java学习型技术博客、期待与您交流!------------ 前面我们用OC的类创建对象的时候我们用的是new方法。其实new方法是一个组合的方法,它是由两个方法组合在一块的,分别是alloc方法和init方法。其中alloc方法是类方法,它是用来给对象分配一个存储空间的,init方法是对象方法,它是用来对对象进行初始化的,init方

liu01991的博客 705

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

黑马程序员——OC——构造方法和分类

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ---------------------- 构造方法: 构造方法是一个对象方法用 - 号开头,用来初始化对象。 重写构造方法的目的:为了让对象创建出来,成员变量就会有一些固定的值  重写构造方法的注意点 1.先调用父类的构造方法([super in

mu3677065的专栏 346

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

黑马程序员---OC构造方法

———Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——— 构造方法:是用来初始化对象的方法 所以要说构造方法,先从创建对象开始来理解 之前我们创建对象都是调用类的new方法来创建,如下: Person *p = [Person new]; 这一句是创建了一个Person对象,并让指针p来操作这个对象 实际上完整的创建一个可用的对象分两步 1.分配存储空

Halo的专栏 528

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

[黑马程序员][OC]构造方法

------Java培训、Android培训、iOS培训、.Net培训期待与您交流! ------- 构造方法: 用来初始化对象的方法,是一个对象的方法。 Person *p = [[Person alloc] init]; 重写构造方法的目的: 为了让对象创建出来成员变量就有一些固定值 代码示例: Person类: #import @interface Perso

sajiner的专栏 360

黑马程序员_OC分类和构造方法

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 构造方法 1).含义:用来初始化对象的方法,就是构造方法。构造方法是对象方法,以“-”号开头。 2).创建对象的过程: a.分配存储空间,使用NSObject的alloc方法实现,只是返回了存储空间。如下实例: [objc] view plaincopypr

moonfoot的博客 404

黑马程序员——OC语言构造方法

------- Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 一、构造方法 1、构造方法的调用 完整的创建一个可用的对象:Person *p=[Person new]; New方法的内部会分别调用两个方法来完成2件事情,1)使用alloc方法来分配存储空间(返回分配的对象);2)使用init方法来对对象进行初始化。 可以把new方

qiuyuhuaihua的专栏 464

黑马程序员—OC语言基础—构造方法和分类

————————Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——————— 本文我们主要讨论构造方法的使用。 一、构造方法 一般我们写的 Person *p = [[Person alloc] init];init是初始化的意思,当初始化完成时,成员变量为0,但是我们不想让成员变量初始值为0,希望为其他值,那么就需要我们构造方法。 构造的方法如

编程之路 435

黑马程序员--OC--重写构造方法

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 一  OC中的构造方法:             给对象进行初始化的方法 二  OC给对象进行初始化的方法是                 init        该方法是一个对象方法                               该方法返回的是一个对象(调用i

qq_33493835的博客 817

黑马程序员-oc中的构造方法

------- android培训、java培训、期待与您交流! ---------- 构造方法:用来初始化对象的;首先分解一下创建对象的过程: Person *p = [Person new]; // new方法是alloc 和 init 这两个方法的组合;  完整的创建可用对象的过程:   1:分配存储空间;  就是调用的  +alloc 方法,这个

qq_22747589的专栏 362

黑马程序员-OC-构造方法

1.构造方法是用来初始化对象的

whj___的专栏 386

黑马程序员 - OC语言 - 重写构造方法

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-有两个方法: +alloc : (类方法)给对象分配空间的方法 -init:(对象方法)初始化对象的方法,<真正的构造方法> 有什么用? 在对象初始化的适合,就给属性赋值! (如:当需要创建此类很多对象时,可以避免多行代码 Person *

gd362660870的博客 447

黑马程序员_OC点语法 id 构造方法复习

一 . id是万能指针等于 NSObject *,能指向和操作任何OC对象 id d = [person new]; d.age=10; 二. 构造方法:用来初始化对象的方法,是个对象方法,-开头     1.重写构造方法的目的:为了让对象创建出来,成员变量就会有一些固定的值     2.重写构造方法的注意点 1>.先调用父类的构造方法([super init]

u014561412的专栏 379

11、黑马程序员-OC语言构造方法

一、构造方法 (一)构造方法的调用 完整的创建一个可用的对象:Person *p=[Person new]; New方法的内部会分别调用两个方法来完成2件事情,1)使用alloc方法来分配存储空间(返回分配的对象);2)使用init方法来对对象进行初始化。 可以把new方法拆开如下: 1.调用类方法+alloc分配存储空间,返回未经初始化的对象 Person *p1=[person

zwcshy的专栏 526
上一篇: 黑马程序员——OC基础---继承
下一篇: 黑马程序员——OC基础---协议
abuzzworld
博客等级 码龄18年 2粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值