iOS学习之OC语————对于自定义构造方法的认识与理解

来源:互联网 发布:新淘宝网 编辑:程序博客网 时间:2024/06/06 16:32

浅谈对于自定义构造方法的认识与理解


早先初步学习OC语言的时候,当第一次听说自定义构造方法时并没有特别的感受,只是觉得它只是叫这个名字而已,对于它后面传入的参数以及参数类型只知道要按照那个规则去编写,并不知道为什么要写后面的参数,这跟其他的函数方法确实在形式上存在很大差距。

慢慢的发现,自定义构造方法这个名字需要被仔细理解,自定义顾名思义就是程序员自己定义,构造就是如何去创建,如何实现这个方法的一个过程,这个过程是程序员自己定义的,然而这本质上是一个函数方法。程序员可以通过这个方法来实现将一个对象的属性通过自己定义的这个模式配置上去。省去了一遍一遍的属性设置的过程,其中的属性就是自定义构造方法中传递的各类参数,而且可以自己定义参数的数量和类型,非常方便。


首先举个简单的例子好了

student.h

1 #import <Foundation/Foundation.h>

3 @interface Student : NSObject {
4 int _age;
5 }
6 - (void)setAge:(int)age;
7 - (int)age;
8 @end



student.m

1 #import "Student.h"

3 @implementation Student
4 - (void)setAge:(int)age {
5 _age = age;
6 }
7 - (int)age {
8 return _age;
9 }
10 @end


在main函数中创建一个Student对象

1 #import "Student.h"

3 int main(int argc, const char * argv[])
4 {

6 @autoreleasepool {
7 Student *stu = [[Student alloc] init];

9 stu.age = 10;
10 
11 [stu release];
12 }
13 return 0;
14 }

在第7行调用Student的alloc方法分配内存,然后再调用init方法初始化对象, 像init这样用来初始化对象的方法,我们可以称为"构造方法",默认的构造方法,也就是init方法,它是不接收任何参数的。因此,在实际开发中,为了方便,会经常自定义构造方法。接下来,自定义一个构造方法,可以传入一个age参数来初始化Student对象,个构造方法接收一个int类型的age参数,目的是在初始化student对象时,顺便设置成员变量_age的值。之后在main函数中调用了构造方法initWithAge:,并传入10作为参数,因此Student对象的成员变量_age会变为10。




顺便谈一下description方法

description方法的默认实现是返回类名和对象的内存地址,这样的话,使用NSLog输出OC对象,意义就不是很大,因为我们并不关心对象的内存地址,比较关心的是对象内部的一些成变量的值。因此,会经常重写description方法,覆盖description方法的默认实现
比如,重写Student的description方法,返回成员变量_age的值

1 - (NSString *)description {
2 return [NSString stringWithFormat:@"age=%i", _age];
3 }


在第2行调用了NSString这个类的静态方法stringWithFormat初始化一个字符串对象,并返回这个字符串
假如_age是10,那么description方法返回的字符串就是@"age=10"

1 Student *stu = [[Student alloc] initWithAge:10];

3 NSLog(@"%@", stu);

5 [stu release];



    0 0
    原创粉丝点击