03-OC、封装
2017-04-24 本文已影响20人
amoLink
一、封装
面向对象的三大特征:封装、继承、多态。
在OC中,使用 @interface 和 @implementation 来处理类。
@interface 就像暴露在外面的时钟表面,向外界提供展示及接口。@implementation 就像隐藏在时钟内部的构造实现,把具体实现封装起来。
二、set 方法
开发过程中,考虑到数据的安全性和合理性,一般不使用 @public 关键字修饰成员变量,而是使用 set 方法来为对象提供成员变量的值。在 set 方法中可以对一些不合理的赋值进行过滤。
set 方法的作用:为外界提供一个设置成员变量的方法。
-
规范:
-
方法名必须以 set 开头;
-
set 后加上成员变量名,首字母大写;
-
返回值一定是 void;
-
必须接收一个参数,且类型与成员变量一致;
-
形参名不能喝成员变量名一样。(苹果推荐成员变量名以 _ 开头)
-
set 方法的好处
-
不让数据暴露在外,保证数据的安全性;
-
可以对设置的数据进行选择性过滤。
-
set方法使用示例:
方法声明
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
int _age; // 成员变量,无@public修饰
}
- (void)setAge:(int)age; // set 方法声明
- (void)print;
@end
方法实现
#import "Person.h"
@implementation Person
- (void)setAge:(int)age
{
_age = age;
}
- (void)print
{
NSLog(@"_age = %d", _age);
}
@end
测试程序
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
@autoreleasepool
{
Person *p = [[Person alloc] init];
[p setAge:18];
[p print];
NSLog(@"纸上得来终觉浅...");
}
return 0;
}
运行结果
HelloWorld[783:40143] _age = 18
HelloWorld[783:40143] 纸上得来终觉浅...
三、get 方法
既然有设置成员变量的方法,那就有获取成员变量的方法,get方法就是用来获取成员变量的。
get方法作用:为调用者返回对象内部的成员变量。
- 规范
- 必须有返回值,返回成员变量;
- 方法名与成员变量一致;
- 不需要接收参数。
- get 方法示例
声明
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
int _age; // 成员变量,无@public修饰
}
- (void)setAge:(int)age; // set 方法声明
- (int)age; // get 方法声明
@end
实现
#import "Person.h"
@implementation Person
- (void)setAge:(int)age
{
_age = age;
}
// get 方法实现
- (int)age
{
return _age;
}
@end
测试程序
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
@autoreleasepool
{
Person *p = [[Person alloc] init];
[p setAge:18];
NSLog(@"age = %d", [p age]);
NSLog(@"纸上得来终觉浅...");
}
return 0;
}
运行结果
HelloWorld[1346:84182] age = 18
HelloWorld[1346:84182] 纸上得来终觉浅...
四、self 关键字
self 是一个指针,谁调用了当前方法,self 就指向谁。在对象方法中就代表调用方法的对象,在类方法中就代表调用方法的类。
- self的用途
- 在对象方法中可以利用 self ->成员变量 访问当前对象的成员变量。
- [self 方法名]; 可以调用其他的对象方法或类方法。