OC——封装(初级与高级)
所谓的封装,就是通过定义方法或者函数去操作成员属性或者成员变量,而不是直接通过指针方式去操作。借此达到提高代码安全性,代码可行性以及代码执行效率的目的。
1:初级封装,对成员变量进行封装。
#import <Foundation/Foundation.h> @interface Person : NSObject { // @public int age; NSString *name; } - (id) init; - (void) setAge:(int) newAge; - (void) setName:(NSString *) newName; @end @implementation Person - (id) init { if (self = [super init]) { age = 20; name = @"jerry"; } return self; } - (void) setAge:(int)newAge { if (age == 0) { age = 20; } age = newAge; } - (void) setName:(NSString *)newName { name = newName; } //对name和age方法同时进行封装,不需要在.h文件中提前定义 - (void) setName:(NSString *)newName andAge:(int)newAge { age = newAge; name = newName; } @end int main(int argc, const char * argv[]) { @autoreleasepool { //方法一:通过指针来修改age的值,但存在不稳定性,因为只能访问Person类中的public属性,并非随时都有效。而且缺乏安全性 //并且当age的名字改变时,容易因未及时修改而造成无法调用。 Person *p = [[Person alloc]init]; p -> age = 10; //方法二:通过调用set方法来修改age的值,稳定安全。并且可以在set方法中添加限制,提高代码安全性。 [p setAge:10]; [p setName:@"nick" andAge:21]; } return 0; }
2:高级封装,对整个类进行封装
无法再通过方法一来实现修改。
#import <Foundation/Foundation.h> @interface Computer : NSObject { int cpu; int inch; } @end @implementation Computer //进行二次封装 - (void) setCpu:(int)newCpu { cpu = newCpu; } - (void) setInch:(int)newInch { inch = newInch; } @end @interface Person : NSObject { Computer *Mac; } @end @implementation Person - (void) setMac:(Computer *)newMac { [self setnewMac:(Computer *)newMac]; } //即便之后setMac的名字改变,也可以通过self来接洽而无需修改main.m - (void) setnewMac:(Computer *)newMac { Mac = newMac; } @end int main(int argc, const char * argv[]) { @autoreleasepool { Person *p = [[Person alloc]init]; Computer *Mac = [[Computer alloc]init]; [Mac setCpu:64]; [Mac setInch:15]; [p setMac:Mac]; } return 0; }