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:10]; 

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()方法。它们的作用都是返回该类对象信息的字符串!我们可以根据需要重写它们,使其返回对我们有意义的数据。

时间: 2024-08-02 07:00:08

OC语法4——自定义构造方法,description方法的相关文章

OC基础(九)description方法

一.基本含义 1.当用%@打印类或对象时候,系统内部默认就会调用 description方法,拿到返回值进行输出,默认输出的是返回类名和对象的内存地址. 其实%@的本质是用于打印字符串. 调用该方法, 该方法会返回一个字符串, 字符串的默认格式 <类的名称: 对象的地址> 2.代码: 1 #import <Foundation/Foundation.h> 2 @interface Animal: NSObject 3 /** 颜色 */ 4 @property (strong, n

OC语言--自定义构造方法和description方法

1.Student.h 1 #import <Foundation/Foundation.h> 2 3 @interface Student : NSObject { 4 int _age; 5 } 6 - (void)setAge:(int)age; 7 - (int)age; 8 @end 2.Student.m 1 #import "Student.h" 2 3 @implementation Student 4 - (void)setAge:(int)age { 5

OC语言学习 (六) 继承、多态,构造方法,description方法

声明父类Animal继承自NSObject Animal.h #ifndef oc_Animal_h #define oc_Animal_h @interface Animal : NSObject { @public int weight; } - (void)eat; //重写默认构造方法 - (id) init; //自定义构造方法 - (id) initWithWeight:(int)newWeight; @end #endif Animal.m #import <Foundation/

自定义构造、description方法、SEL

[Objective-C]07-自定义构造方法和description方法 // 构造方法:用来初始化对象的方法,是个对象方法,”-"开头// 重写构造方法的目的:为了让对象创建出来,成员变量就会有一些固定的值/* 重写构造方法的注意点1.先调用父类的构造方法([super init])2.再进行子类内部成员变量的初始化 */ // 重写-init方法//- (id)init//{//    // 1.一定要调用回super的init方法:初始化父类中声明的一些成员变量和其他属性//    se

自定义构造方法和description方法

[转自]http://www.cnblogs.com/mjios/archive/2013/04/19/3031412.html 本文目录 知识回顾 一.自定义构造方法 二.description方法 说明:这个Objective-C专题,是学习iOS开发的前奏,也为了让有面向对象语言开发经验的程序员,能够快速上手Objective-C.如果你还没有编程经验,或者对Objective-C.iOS开发不感兴趣,请忽略.学习本专题之前,建议先学习C语言专题. 知识回顾 在第5讲中已经介绍了如何定义类

oc中的构造方法和description方法,变量的作用域,

1.构造方法的声明和实现 //声明 - (id) initWithAge:(int) age andNo: (int) no; //实现 - (id) initWithAge:(int) age andNo: (int) no { self=[super init];//调用父类的init方法初始化 //判断对象是否为空 也可以直接写if(self) 或 if(self=[super init]) if(self!=nil) { _age=age; _no=no; } return self;

OC的构造方法init以及自定义构造方法

之前我们利用类来创建对象用到了一个类方法new,可是new方法具体是怎么执行的呢?例如 1 Person *p = [Person new]; 程序只要执行了这一行代码,内存中就会有一个Person类和Person对象,并且Person对象的所有实例变量都初始化为0,并且还有个isa指针指向Person类,那么这个对象实际上是通过两部产生的:第一步,调用Person类的alloc类方法分配一定的内存空间给Person对象,它的返回值就是对象本身,实际上也是这一段内存空间的首地址:第二步,调用对象

四.OC基础--1.文档安装和方法重载,2.self和super&amp;static,3.继承和派生,4.实例变量修饰符 ,5.私有变量&amp;私有方法,6.description方法

四.OC基础--1.文档安装和方法重载, 1. 在线安装 xcode-> 系统偏好设置->DownLoads->Doucument->下载 2. 离线安装 百度xcode文档 3. 方法重载: 是指在一个类中定义多个同名的方法 在OC中没有重载 2.self和super&static, self和super: 1. self理解: 谁调用当前方法, self就代表谁. 比如: 在对象方法中,self代表的是对象, 因为只有对象才可以调用对象方法 在类方法中, self代表的

OC语法2——OC的类,方法,成员变量的创建

类的创建: 与Java不同的是,OC创建一个类需要两个文件(.h和.m文件) 1> xxx.h:声明文件.用于声明成员变量和方法.关键字@interface和@end成对使用. 声明文件只是声明该类里成员变量和方法的格式(返回值类型,参数类型等),并不会实现它们. 在OC中继承用冒号表示,所有类都是继承于NSObject的,所以Sudent:NSObject.(这是和Java不同的,Java中所有类都继承于Object,但不用每定义一个类都写明继承关系,所有类都是默认继承于Object类的).