03-OC、封装

2017-04-24  本文已影响20人  amoLink

一、封装

面向对象的三大特征:封装、继承、多态。
  在OC中,使用 @interface@implementation 来处理类。

图 1
  @interface 就像暴露在外面的时钟表面,向外界提供展示及接口。@implementation 就像隐藏在时钟内部的构造实现,把具体实现封装起来。

二、set 方法

开发过程中,考虑到数据的安全性和合理性,一般不使用 @public 关键字修饰成员变量,而是使用 set 方法来为对象提供成员变量的值。在 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方法作用:为调用者返回对象内部的成员变量。

#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 就指向谁。在对象方法中就代表调用方法的对象,在类方法中就代表调用方法的类。

上一篇下一篇

猜你喜欢

热点阅读