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

  • 相关阅读:
    tornado源码分析-多进程
    create a cocos2d-x-3.0 project in Xcode
    记录自己的傻逼的错误:找不到或无法载入主类
    MVC5 Entity Framework学习之实现主要的CRUD功能
    Linux中实现多网卡绑定总结
    it码农之心灵鸡汤(一)
    【高级算法】遗传算法解决3SAT问题(C++实现)
    MySQL-分区表-1
    OpenSift源代码编译过程记录
    Android Studio 视图解析
  • 原文地址:https://www.cnblogs.com/wangerxiansheng/p/4296823.html
Copyright © 2011-2022 走看看