方法的使用与调用

方法的调用

在初始化Person对象的时候,我们使用到了以下代码:

  1. Person *person1 = [Person alloc];
  2. person1 = [person1 init];

按住command键,点击alloc可以进入到NSObject的头文件中,找到allocinit方法的声明:

  1. + (instancetype)alloc; // 开辟内存
  2. - (instancetype)init; // 初始内存
  1. 方法使用空格来调用;
  2. +方式使用类名进行调用,如这里的[Person alloc]
  3. -方式使用对象进行调用,如这里的[person1 init]

对象的初始化

刚才初始化Person对象的时候,我们所使用的是init方法,但是这样init出来的对象没有自身独有的元素。比如,我们的Person类中,还有姓名、年龄等成员变量根本体现不出来。如果想要对某个人的姓名、年龄赋值,怎么办呢?

自定义初始化方法

首先在.h的@interface内部声明方法(如果不声明,则外则不可访问):

  1. #import <Foundation/Foundation.h>
  2. @interface Person : NSObject {
  3. NSString *_name;
  4. NSInteger _age;
  5. float _height;
  6. }
  7. // 注意这里的编码规范,先定义成员变量,然后换行再声明方法
  8. - (instancetype)initWithName:(NSString *)name age:(NSInteger)age height:(float)height;
  9. @end

然后在.m中进行实现:

  1. #import "Person.h"
  2. @implementation Person
  3. - (instancetype)initWithName:(NSString *)name age:(NSInteger)age height:(float)height {
  4. self = [super init];
  5. if (self) {
  6. // 需要添加的特性
  7. _name = name;
  8. _age = age;
  9. _height = height;
  10. }
  11. return self;
  12. }
  13. @end

在自定义初始化方法的时候,一定要注意一下几点:

  1. 方法名必须是initWith开头,注意大小写;
  2. 每个init方法的基本结构如下:
  1. - (instancetype)initWithXxx:(NSString *)xxx {
  2. self = [super init];
  3. if (self) {
  4. // 需要添加的特性
  5. }
  6. return self;
  7. }

那么这个时候,我们在main.m中的Person初始化方法也需要修改:

  1. Person *person2 = [[Person alloc] initWithName:@"tangjr" age:10 height:100];

description方法

当使用NSLog打印对象信息的时候,系统会走该对象的description方法。

比如这里,我们想要输出person2这个人的信息,就可以通过重写description来实现。