OC的基础语法(三)
1.类方法的概述以及注意事项
/* 类方法的使用注意: 1)类方法可以和对象方法同名,他们的调用互不影响 2)对象只能调用对象方法,类只能调用类方法 3)类方法也应该在@interface @end 声明,在@implementation @end之间去实现 关于类方法使用易犯的错误 1)在类方法中使用了成员变量(不允许的) 2) 在类方法中又调用了自己,则该方法就会陷于一个无线循环状态 */
2.类方法和对象方法的关系
/* 类方法: 1) 以+ 开头定义的方法 2) 用类名来调用 3) 类方法中,不能访问成员变量 4) 类方法中 能调用其他对象方法,需要满足以下两个条件 1) 对象作为方法的参数传递过来 2)在类方法中创建新的对象 类方法中,调用自己类的对象方法 1) 把当前的类对象作为方法的参数传递过来 2)在类方法中,创建一个新的实例对象,调用本类的方法 对象方法: 1) 以 - 开头,定义的方法 2) 以对象名来调用 3) 对象方法中,可以访问成员变量 4) 在对象方法中 能 能调用类方法 */
3.封装
/* 封装的核心思想: 把复杂的数据操作隐藏起来,对外只提供接口 原理: 定义对象方法 去访问对象的成员变量 不封装的缺点: 对象失去了对对象的成员变量的管理权 封装的步骤: 1)定义设置成员变量的对方方法(setter)-写方法 规范: (1)必须是一个对象方法 (2)方法名必须以set开头 (3)必须是set+成员变量去掉下划线首字母大写 (4) 必须没有返回值 (5) 必须有一个参数 (6)参数的类型必须和成员变量的类型一致 (7) 形参名 一般情况下 是成员变量去掉下划线部分 (8) set方法的实现必须是给成员变量赋值 格式:成员变量 = 形参变量 float _money //这样就封装了一个对 _money 设置值得一个方法 -(void)setMoney:(float) money; //实现 -(void)setMoney:(float) money{ _money = money; } 2)获取对象的成员变量(getter)值 --- 读方法 规范: (1)必须是一个对象方法 (2)必须有返回值,反回值类型必须和成员变量的类型一致 (3) 方法名是 成员变量 去掉下划线部分 (4) 方法一定没有参数 (5) 必须返回成员变量 -(float)money; -(float)money{ return _money; } */
代码如下:
main.m
#import <Foundation/Foundation.h> #import "Person.h" int main(int argc, const char * argv[]) { @autoreleasepool { Person *p = [Person new]; [p setMoney:-12.3f]; NSLog(@"%.2f",[p money]); } return 0; }
Person.h
#import <Foundation/Foundation.h> @interface Person : NSObject { float _money; } -(void)giveMoney:(float) money; //封装对_money操作的方法 //设置_money值的方法(setter) -(void)setMoney:(float) money; //封装获取_money值得方法 -(float)money; @end
Person.m
#import "Person.h" @implementation Person -(void)giveMoney:(float) money{ //做一个判断,如果钱是负数,不再设定 if(money>0){ _money = money; NSLog(@"money:%.2f",_money); } } -(void)setMoney:(float) money{ //设定成员变量值 //成员变量 = 形参变量 if (money>0) { _money = money; } } //封装获取_money值得方法 -(float)money{ //返回成员变量的值 return _money; } @end