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;
}

 

  

 

  

  

 

posted @ 2016-01-05 16:18  LeoMabi  阅读(173)  评论(0编辑  收藏  举报