前面我们了解了一些封装的思想, 所谓的封装就是把一些成员变量保护起来, 不让别人去随意修改, 其实这个和我们日常生活中的包装很像, 比如超市里的真空包装食品, 经常真空包装的保护, 那么食物就不容易发霉过期, 那么在OC程序里面的封装也是同样的道理, 否则一直使用@public会让别人随意改动自己的数据, 从而导致程序崩溃, 无法正常的运作.
那么封装有什么规范呢? 下面让我们来看看:
需求: 创建一个学生类, 知道他的数学分和语文分, 定义一个方法需要知道他两科的总分, 以及平均分.
属性:
1. 数学分
2. 语文分
方法:
1. 总分
2. 平均分
那么我们来看看例子:
#import <Foundation/Foundation.h> @interface Student : NSObject { int _mathScore; //数学成绩 int _languageScore; //语文成绩 int _totalScore; //总分 int _averageScore; //平均分 } - (void)setMathScore:(int)mathScore; //数学分的set方法声明 - (int)mathScore; //数学分的get方法声明 - (void)setLanguageScore:(int)languageScore; //语文分的set方法声明 - (int)languageScore; //语文分的get方法声明 - (int)totalScore; //总分方法声明 - (int)averageScore; //平均分方法声明 @end @implementation Student - (void)setMathScore:(int)mathScore //数学分set方法实现 { _mathScore = mathScore; _totalScore = _mathScore + _languageScore; _averageScore = _totalScore / 2; } - (int)mathScore <span style="font-family: Arial, Helvetica, sans-serif;">//数学分get方法实现</span> { return _mathScore; } - (void)setLanguageScore:(int)languageScore <span style="font-family: Arial, Helvetica, sans-serif;">//语文分set方法实现</span> { _languageScore = languageScore; _totalScore = _mathScore + _languageScore; _averageScore = _totalScore / 2; } - (int)languageScore <span style="font-family: Arial, Helvetica, sans-serif;">//语文分get方法实现</span> { return _languageScore; } - (int)totalScore //总分方法的实现 { return _totalScore; } - (int)averageScore //平均分方法的实现 { return _averageScore; } @end int main() { Student *stu = [Student new]; [stu setMathScore: 80]; [stu setLanguageScore:60]; int a = [stu totalScore]; NSLog(@"总分是%d.", a); int b = [stu averageScore]; NSLog(@"平均分%d", b); return 0; }
看完例子之后, 我们讲解一下注意事项:
1. 成员变量声明的时候为了规范, 必须以" _ "符号开头, 加上驼峰标识.
2. 如果不是有必要的需求, 不要用@public, 改而使用set方法和get方法.
3. 方法名的名字和参数的名字越详细越好, 最好长的像句子一样, 因为苹果公司推荐这么使用.
封装的好处:
1. 可以过滤一些不合理的数值
2. 屏蔽掉内部的赋值方式
3. 让别人可以不必在意内部的细节
好了, 这次我们就到这里, 下次我们继续~~