初学OC。对init这种方法不是非常了解。我们如今来分别对init方法进行重写以及自己定义,来加深对他的了解。

本样例也是用Person类来进行測试。

(一)重写init方法。

(1)在Person.h中声明init方法:

-(instancetype)init;

(2)在Person.m中声明成员变量。以及写一个打印成员变量的函数,而且重写init初始化方法:在重写的方法中。对成员变量进行了赋值。注意,这个init方法是无參数的方法。

{
NSString *_peopleName;
int _peopleAge;
} -(void)show{ NSLog(@"_peopleName = %@",_peopleName);
NSLog(@"_peopleAge = %d",_peopleAge); } //重写初始化方法。
- (instancetype)init
{
self = [super init];
if (self) {
_peopleName=@"Bob";
_peopleAge=24;
}
return self;
}

(3)在main.m中调用该重写的init方法,并进行打印成员变量的值。

        People *people  = [[People alloc]init];
[people show];

(4)输出结果例如以下:

(5)结果分析,输出结果成功打印出我们在init方法定义时候对成员变量的赋值。

符合预期。我们成功实现了对init方法的重写。

(二)自己定义init方法。

(1)在重写的init方法中。我们发现一个问题,我们无法在main.m中实现对init的操作。也无法通过參数传值的方式实现对成员变量的赋值。

最致命的问题是无法在实例化一个对象的时候对他拥有的成员变量赋值。

所以我们最好自己定义init方法。

首先在Person.h中声明自己定义init方法,參数包含peopleName,peopleName.

-(instancetype)initPeople: (NSString *) peopleName andAge: (int)peopleAge;

(2)在Person.m中实现init方法。使用传入的參数值对成员变量进行赋值:

-(instancetype)initPeople:(NSString *)peopleName andAge:(int)peopleAge{

    self = [super init];
if (self) {
_peopleName = peopleName;
_peopleAge = peopleAge;
}
return self;
}

(3)在main.m中实例化对象,在实例化对象的同一时候进行成员变量的赋值,然后信息打印:

People *people2 = [[People alloc]initPeople:@"Jack" andAge:26];
[people2 show];

(4)输出结果:

(5)结果分析,我们成功在实例化对象的时候并对其赋值,这个就是初始化方法的作用。比最初的重写init方法更为灵活。

这就和C++中的构造方法起到类似的作用。

github主页:https://github.com/chenyufeng1991  。欢迎大家訪问!

Objective-C学习笔记(二十二)——初始化方法init的重写与自己定义的更多相关文章

  1. 汇编入门学习笔记 (十二)—— int指令、port

    疯狂的暑假学习之  汇编入门学习笔记 (十二)--  int指令.port 參考: <汇编语言> 王爽 第13.14章 一.int指令 1. int指令引发的中断 int n指令,相当于引 ...

  2. VSTO 学习笔记(十二)自定义公式与Ribbon

    原文:VSTO 学习笔记(十二)自定义公式与Ribbon 这几天工作中在开发一个Excel插件,包含自定义公式,根据条件从数据库中查询结果.这次我们来做一个简单的测试,达到类似的目的. 即在Excel ...

  3. Binder学习笔记(十二)—— binder_transaction(...)都干了什么?

    binder_open(...)都干了什么? 在回答binder_transaction(...)之前,还有一些基础设施要去探究,比如binder_open(...),binder_mmap(...) ...

  4. java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)

    java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessCo ...

  5. Android学习笔记(十二)——实战:制作一个聊天界面

    //此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 运用简单的布局知识,我们可以来尝试制作一个聊天界面. 一.制作 Nine-Patch 图片 : Nine-Pa ...

  6. MySQL数据库学习笔记(十二)----开源工具DbUtils的使用(数据库的增删改查)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  7. 如鹏网学习笔记(十二)HTML5

    一.HTML5简介 HTML5是HTML语言第五次修改产生的新的HTML语言版本 改进主要包括: 增加新的HTML标签或者属性.新的CSS样式属性.新的JavaScript API等.同时删除了一些过 ...

  8. o'Reill的SVG精髓(第二版)学习笔记——第十二章

    第十二章 SVG动画 12.1动画基础 SVG的动画特性基于万维网联盟的“同步多媒体集成语言”(SMIL)规范(http://www.w3.org/TR/SMIL3). 在这个动画系统中,我们可以指定 ...

  9. Dynamic CRM 2013学习笔记(十二)实现子表合计(汇总,求和)功能的通用插件

    上一篇 Dynamic CRM 2013学习笔记(十一)利用Javascript实现子表合计(汇总,求和)功能 , 介绍了如何用js来实现子表合计功能,这种方法要求在各个表单上添加js方法,如果有很多 ...

随机推荐

  1. 通过Ajax和SpringBoot交互的示例

    转自:https://blog.csdn.net/oppo5630/article/details/52093898/

  2. Python 32 通信循环 连接循环 粘包问题

    一:通信循环 二:连接循环 三:粘包问题

  3. mysql 年龄计算(根据生日字段)

    mysql 年龄计算(根据生日字段) year( from_days( datediff( now( ), birthdate))) //获取年龄 now() 当前时间,精确到秒 datediff(b ...

  4. B - String Task

    Problem description Petya started to attend programming lessons. On the first lesson his task was to ...

  5. Java中的常用类有哪些

    1NumberFormat 2DecimalFormat 3BigDecimal 4Math 5Random 6DateFormat 7SimpleDateFormat 8Calendar 9Date ...

  6. Java接口中的成员变量为什么必须声明为public static final?

    我想对于每个Java程序员来说,接口都不陌生,接口中的方法也经常使用.而接口中的成员变量,就显得用得少一点,而对于成员变量为什么必须声明为public static final,可能就更不清楚了,而且 ...

  7. Vue掉坑记

    本文章汇总学习过程中掉入和不理解的坑,会持续更新,请保持关注 1.过滤器类 搜索过滤 2.修饰符 修饰符汇总 3.webpack webpack+vuecli打包路径 4.Vue后台管理框架 组件后台 ...

  8. vue.js $set的使用 数组

    [javascript] view plain copy <!DOCTYPE html> <html lang="en"> <head> < ...

  9. overflow onclick ondblclick 练习

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. 基于 CC2530 的温度采集系统(未定稿)

    前言 最近在自学 Zigbee,每天的主要是任务是:看博客,看 CC2530 的 datasheet 和实践,熟悉片上的 SFR 以及控制板子. 学和做内容包括:IO.外部中断.Timer1/3/4. ...