方法的使用与调用

方法的调用

在初始化Person对象的时候,我们使用到了以下代码: 1. Person *person1 = [Person alloc]; 2. person1 = [person1 init];

按住command键,点击alloc可以进入到NSObject的头文件中,找到alloc与init方法的声明: 1. + (instancetype)alloc; // 开辟内存 2. - (instancetype)init; // 初始内存

  1. 方法使用空格来调用;
  2. +方式使用类名进行调用,如这里的[Person alloc];
  3. -方式使用对象进行调用,如这里的[person1 init]。

对象的初始化

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

自定义初始化方法

首先在.h的@interface内部声明方法(如果不声明,则外则不可访问): 1. #import 2. 3. @interface Person : NSObject { 4. 5. NSString *_name; 6. NSInteger _age; 7. float _height; 8. } 9. 10. // 注意这里的编码规范,先定义成员变量,然后换行再声明方法 11. - (instancetype)initWithName:(NSString *)name age:(NSInteger)age height:(float)height; 12. 13. @end

然后在.m中进行实现: 1. #import "Person.h" 2. 3. @implementation Person 4. 5. - (instancetype)initWithName:(NSString *)name age:(NSInteger)age height:(float)height { 6. 7. self = [super init]; 8. 9. if (self) { 10. 11. // 需要添加的特性 12. _name = name; 13. _age = age; 14. _height = height; 15. } 16. 17. return self; 18. } 19. 20. @end

在自定义初始化方法的时候,一定要注意一下几点: 1. 方法名必须是initWith开头,注意大小写; 2. 每个init方法的基本结构如下:

  1. - (instancetype)initWithXxx:(NSString *)xxx {
    2.   3.     self = [super init];
    4.   5.     if (self) {
    6.   7.         // 需要添加的特性
    8.     }
    9.     return self;
    10. }

那么这个时候,我们在main.m中的Person初始化方法也需要修改: 1. Person *person2 = [[Person alloc] initWithName:@"tangjr" age:10 height:100];

description方法

当使用NSLog打印对象信息的时候,系统会走该对象的description方法。 比如这里,我们想要输出person2这个人的信息,就可以通过重写description来实现。