OC语法4——自定义构造方法,description方法
自定义构造方法:
我们已经知道创建对象分两步,1:在内存中开辟存储空间,并把地址存储在指针变量里,2:调用指针变量的初始化方法init初始化该对象。
Student * stu = [Student alloc];
stu = [stu init];
在这里,init方法是系统原始的初始化方法,但有时我们需要重写该初始化方法,使其在创建该对象的同时赋予它属性的值。
假如,我们现在要重写原始初始化方法,使其创建一个有年龄(age)的stu。
首先,在Student.h中声明自定义方法:
- (id)initWithAge:(int)age;
然后,在Student.m中实现该自定义方法:
- (id)initWithAge:(int)age {
self = [super init]; //先调用父类的初始化方法,初始化父类
if (self != nil) { //若父类初始化成功,则开始初始化当前对象stu
_age = age;
}
return self;
}
注意:构造方法内部首先要调用父类的初始化方法(先把父类的某些东西实现初始化)。若父类初始化成功,则开始初始化当前对象stu(即给stu的属性_age赋值)。
description方法:
我们从打印方法说起。
无论是什么语言的打印方法,都是既可以打印基本类型数据,也可以打印对象。例如:
Student *stu = [[Student alloc] initWithAge:]; NSLog(@"%@", stu); [stu release];
注意:
NSLog(@"%@");
NSLog()是OC的打印方法。
OC的字符串前面要加@,例:@"wanger";
占位符%@表示对象。
上面的运行结果,打印出来是: <Student: 0x100109910>。
当要打印一个对象时,会自动调用这个对象的description方法,该方法的返回值是字符串类型的,返回的该字符串里有类名和对象地址的信息(<Student:ox100109910>)。
也就是说原始的description方法的作用是返回一个包含类名和对象地址两个信息的字符串。有时我们并不关心类名和地址,它的实际意义不大,所以有时候需要我们重写该description方法,使其返回对我们更有意义的该对象信息字符串。
假如,我们重写该description方法,使其只返回该对象的age
- (NSString *)description {
return [NSString stringWithFormat:@"age=%i", _age]; //调用NSString的静态方法stringWithFormmat:,传入_age创建一个字符串,并返回。
}
打印结果为:age = 10
注意:
其实OC里的description方法等同于Java里的toString()方法。它们的作用都是返回该类对象信息的字符串!我们可以根据需要重写它们,使其返回对我们有意义的数据。
OC语法4——自定义构造方法,description方法的更多相关文章
- 让LINQ中的查询语法使用自定义的查询方法
使用LINQ时有两种查询语法:查询语法和方法语法 查询语法:一种类似 SQL 语法的查询方式 方法语法:通过扩展方法和Lambda表达式来创建查询 例如: List<, , , }; //查询语 ...
- OC的特有语法-分类Category、 类的本质、description方法、SEL、NSLog输出增强、点语法、变量作用域、@property @synthesize关键字、Id、OC语言构造方法
一. 分类-Category 1. 基本用途:Category 分类是OC特有的语言,依赖于类. ➢ 如何在不改变原来类模型的前提下,给类扩充一些方法?有2种方式 ● 继承 ● 分类(Categor ...
- 六.OC基础--1. id和instancetype类型,2.动态类型检测,3.响应方法,构造方法,4.重写构造方法,5.自定义构造方法
1. id和instancetype类型, id和instancetype类型区别: 1. id和instancetype都可以用来作为方法的返回值 2. id可以用来定义类型,instancetyp ...
- 【Objective-C】2.自定义构造方法和description方法
1.Student.h 1 #import <Foundation/Foundation.h> 2 3 @interface Student : NSObject { 4 int _age ...
- 自定义构造方法和description方法
知识回顾在第5讲中已经介绍了如何定义类和创建并初始化对象,比如有Student这个类1.Student.h 1 #import <Foundation/Foundation.h>23@in ...
- 自定义构造、description方法、SEL
[Objective-C]07-自定义构造方法和description方法 // 构造方法:用来初始化对象的方法,是个对象方法,”-"开头// 重写构造方法的目的:为了让对象创建出来,成 ...
- OC 初识NSString,self关键字,继承,成员变量的可见性,description方法
OC 初识NSString,self关键字,继承,成员变量的可见性,description方法 初识 NSString: char * string = "旭宝爱吃鱼"; 常量字符 ...
- OC基础--description方法
PS:经过之类重写description方法后,个人感觉有点像C#中的ToString();方法 一.description方法的作用:(输出所有的OC对象都用%@) 1.默认情况下(不重写descr ...
- OC语法2——OC的类,方法,成员变量的创建
类的创建: 与Java不同的是,OC创建一个类需要两个文件(.h和.m文件) 1> xxx.h:声明文件.用于声明成员变量和方法.关键字@interface和@end成对使用. 声明文件只是声明 ...
随机推荐
- .net通用权限框架B/S(一)
一直做软件实施,用过一些二次开发平台,最近看了一些大神写的框架,于是参考写了一个B/S通用权限框架,项目使用MVC4+EF5+EASYUI(.net framework4),开发环境vs2010+sq ...
- .net程序员转战android第一篇---环境部署
对于.net开发人员去写java,可谓说是见山是山, 因为太多的相同; 最近段时间因工作因素,将项目中部分功能需要移植到android平台上,经过半个月的煎熬,终于搞完了. 文章中将直观记录我做项目中 ...
- iOS集成支付宝
需要企业和支付宝签约这个是需要审核的[3天左右 以邮件形式告知你] 使用支付宝进行一个完整的支付功能,大致有以下步骤: 1>先与支付宝签约,获得商户ID(partner)和账号ID(sell ...
- JS参数使用带参数的方法
大家都知道,在JS之中,一个变量的生命周期不是以大括号为界限的,所以即使是使用在循环或判断中的变量,外部也可以使用.可如果我们在循环或变量中使用了方法,而且这个方法使用了循环中的变量,那么后面的代码是 ...
- 学习java的视频资源(尚学堂)(比较老旧,但是还是挺好用)
本人新手,转入IT,一开始在学校的时候看过尚学堂 马士兵讲过的java基础视频教程,这次深入学习呢,就从百度云盘找了一整套的视频资源.之后越深入的学习呢,发现这些视频资源VeryCD上都发布了,地址 ...
- 判断mysqli函数里的sql语句是否有错和影响行数
<?php $mysqli=@new mysqli("localhost", "root", "123456", "xsph ...
- 第一个MVC模型
根据慕课网的视频自学来的. 关于MVC的简介和一些常识:http://www.cnblogs.com/jobscn/archive/2011/11/08/2240725.html MVC模式 : MV ...
- ecshop使用Google API及OAuth2.0登录授权(PHP)
一.申请clientID https://console.developers.google.com/project 二.开启Google+ API权限 https://console.develop ...
- *循环-01. 求整数段和【help】
/* * Main.c * 循环-01. 求整数段和 * Created on: 2014年6月18日 * Author: Boomkeeper ***测试木有通过**** */ #include & ...
- CSS自学笔记(10):CSS3盒子模型
CSS3为CSS技术的升级版本.最新版本. 就CSS而言,它是一个模块,是一个庞大而又复杂的模块,但是在CSS3中,将这一个庞大的模块分解为一个个容易理解的同时又很精简的小模块,同时CSS3中又添加了 ...