Objective-c:方法

方法与函数

  • C与OC函数声明:
C函数声明格式 :double    fabs     (double    a );
               ⬆️       ⬆️         ⬆️      ⬆️
              返回值     函数名     形参类型   形参名
               ⬇️       ⬇️         ⬇️      ⬇️
OC函数声明格式:NSInteger getValue (NSString  *string);
  • 方法格式:
方法类型  返回值  方法名    参数类型     参数名
  +|-   (void)  setName:(NSString *) name;

方法的实现

  • 每一个方法的声明必然需要一个方法的实现,一个方法可以不声明直接调用,但是不能不实现直接调用。

  • 实现需要写在@implementation关键字和@end之间,格式如下:

@implementation Person

- (void)sayHello {
    NSLog(@"Hello, everyone!");
}
  • 方法就是类或者对象的行为(动作),每一个方法结束,必须产生某个结果,可能是值的传递,可能是动作的执行,也可能是算法。

方法类型

类方法

  • 类调用的方法,类型标志为+号,表示这个抽象的群体去做某件事情。最常用的类方法是创建对象的便利构造方法。格式如下:
+ (Person *)person;
  • 类方法需要这样使用(我们通常将这个过程称作“初始化”或者“实例化”):
Person *person = [Person person];

实例方法

  • 对象调用的方法,类型标志为-号,表示具体的某一个对象去做某件事情。格式如下:
- (void)doSomething;
  • 实例方法需要这样使用:
Person *person = [[Person alloc] init];

[person doSomething];

方法形式

1、无参数无返回值

- (void)sayHi {

    NSLog(@"Hi");
}

2、无参数有返回值

- (NSString *)drinkTea {

    return @"红茶";
}

3、有参数无返回值

- (void)sayHelloWith:(NSString *)name {

    NSLog(@"Hello, %@!", name);
}

4、有参数有返回值

- (NSInteger)maxNumberWith:(NSInteger)a b:(NSInteger)b {

   return a > b ? a : b;
}

Tips

1、 方法可以有0个或多个参数;

2、如果有参数,每个参数之前需要有一个参数描述,其后添加冒号(:),再加上参数类型和形参名;

3、如果有多个参数,则需在每个参数之前添加其参数描述;

4、如果有多个参数,方法名字是所有参数描述的集合(需带上冒号),如下:

+ (Person *)personWithName:(NSString *)name age:(NSInteger)age;

方法名为:personWithName: age:

方法调度程序

对象收到消息后,如何来调用这些方法?

  • OC中不含继承的方法调度流程:
初始化对象 ->询问是否能调用该方法 -> 能 ? 直接调用 : 报错;
  • OC中含继承的方法调度流程:
初始化对象 -> 直接调用本类存在方法 -> 查询父类是否能调用方法 -> 能 ? 直接调用 : 报错;
  • OC中使用super关键字的方法调度流程:
初始化对象 -> 询问是否能够调用该方法 -> 能 ? 直接调用 : 报错 或 一直查找父类(有 ? 调用 : 报错);

setter 与 getter 方法

  • 对于实例变量值的存和取,分别对应setter和getter两个实例方法,增加方法后,可在本类或者其他类的方法中使用这2个方法。

  • setter 方法,给实例变量一个指定的值;

  • getter 方法,获取实例变量的值;

1、setter 与 getter 方法声明方式:

#import <Foundation/Foundation.h>

@interface Person : NSObject  {
    // 成员变量

    NSString *_name;
}

#pragma mark - setter && getter

// 取值
- (NSString *)name;

// 设值
- (void)setName:(NSString *)name;

@end

2、setter 与 getter 方法实现方式:


#import "Person.h"

@implementation Person

- (NSString *)name {
    return _name;
}

- (void)setName:(NSString *)name {
    _name = name;
}

@end

3、setter 与 getter 方法调用方式:

#import <Foundation/Foundation.h>
#import "Person.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {

#pragma mark - setter && getter

        // 初始化对象
        Person *person = [[Person alloc] init];

        // 调用 setter 方法赋值
        [person setName:@"Admin"];

        // 调用 getter 方法取值
        NSString *name = [person name];

        NSLog(@"person name is '%@'.", name); // 输出 person name is 'Admin'.
    }
    return 0;
}

Tips

1、如果实现 setter 与 getter 方法,则可直接使用点语法,具体如下:

setter调用: person.name = @"Admin";

getter调用: NSString *name = person.name;

description 方法

  • 子类可以重写父类方法,NSObject有一个方法为descrption。

  • 该方法返回NSString,用于描述该对象。

  • 当使用NSLog(@"%@", 对象);时,会默认调用该对象的description方法。

  • 如果我们不重写此方法会默认调用NSObject的该方法,返回形如:<类名:地址>的数据。

  • 子类中重写该方法可以返回自定义对象信息。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值