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

  • 相关阅读:
    浅谈线段树
    并查集最简单讲解
    mysql索引原理深度解析
    算法、数据结构可视化
    php算法题---对称的二叉树
    php算法题---连续子数组的最大和
    Jsoup一个简短的引论——采用Java抓取网页数据
    宏定义详细信息
    解决java.sql.SQLException: ORA-01789: query block has incorrect number of result columns
    BZOJ 2435 NOI2011 道路建设 BFS/DFS
  • 原文地址:https://www.cnblogs.com/wangerxiansheng/p/4296823.html
Copyright © 2020-2023  润新知