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

来源:互联网 发布:base t以太网端口 编辑:程序博客网 时间:2024/05/16 11:42

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-


构造方法

完整的创建一个可用的对象:Person *p=[Person new];

New方法的内部会分别调用两个方法来完成2件事情,1)使用alloc方法来分配存储空间(返回分配的对象);2)使用init方法来对对象进行初始化。

可以把new方法拆开如下:

1.调用类方法+alloc分配存储空间,返回未经初始化的对象

Person *p1=[person alloc];

2.调用对象方法-init进行初始化,返回对象本身

Person *p2=[p1 init];

3.以上两个过程整合为一句:

Person *p=[[Person alloc] init];

说明:init方法就是构造方法,是用来初始化对象的方法,注意这是一个对象方法,一减号开头。默认初始化完毕后,所有成员变量的值都为0。

如果我需要让每个对象创建出来的初始值是10,而不是1,这时候就需要重写构造方法

#import "Person.h"@implementation Person-(id)init{    if(self = [super init]){        _age = 10;    }    return self;}@end

造方法使用注意

子类拥有的成员变量包括自己的成员变量以及从父类继承而来的成员变量,在重写构造方法的时候应该首先对从父类继承而来的成员变量先进行初始化。

原则:先初始化父类的,再初始化子类的。

重写构造方法的目的:为了让对象方法一创建出来,成员变量就会有一些固定的值。

注意点:
先调用父类的构造方法[super init];
再进行子类内部成员变量的初始化。

自定义构造方法

自定义构造方法的规范

(1)一定是对象方法,以减号开头

(2)返回值一般是id类型

(3)方法名一般以initWith开头

-(id)initWithAge:(int)age andName:(NSString *)name{    if(self = [super init]){        _age = age;        _name = name;    }    return self;}

在main函数中:

这里写图片描述

自定义构造方法的使用注意:

自己做自己的事情

父类的方法交给父类的方法来处理,子类的方法处理子类自己独有的属性

description方法

description方法:当使用%@打印一个对象的时候,会调用这个方法
重写父类的description方法

在Person.m文件中,重写description方法:

-(NSString *)description{    NSString *str = [NSString stringWithFormat:@"name %@ and age is %d",_name,_age];    return str;}

在main.m的main函数中测试:

这里写图片描述

0 0