OC隐藏和封装-理解封装和使用访问控制符

Object-C技术学习,更多资源请访问 https://www.itkc8.com

//  main.m

//  OC封装

//

//  Created by Goddog on 15/1/2.

//  Copyright (c) 2015年 Goddog. All rights reserved.

//

/*

 1.封装的理解:(1)指将对象对状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类提供的方法来实现

                对内部信息的操作和访问。

             (2)隐藏类的实现细节,让使用者只能通过事先预定的方法来访问数据,从而可以在该类方法里加入控制逻辑,限制

                对成员变量的不合理访问。

             (3)将对象的成员变量和实现细节隐藏起来,不允许外部直接访问,

                把方法暴露出来,让方法来控制对这些成员变量进行安全的访问和操作。总之,该隐藏的隐藏,该暴露的暴露。

 2.使用访问控制符: (1)@private(当前类访问权限),该类成员变量被修饰之只能在当前类的内部访问,实现部分定义的成员变量

                                          默认是使用这种访问权限。

                 (2)@package(与映像访问权限相同),当前类和当前类实现的同一个映像的任意地方访问。

                 (3)@protected(子类访问权限),当前类和当前类的子类任意地方访问,类的接口部分默认使用的就是该权限

                 (4)@public(公共访问权限),任意地方可以访问。

 3.如果一个OC类的每个成员变量都被使用@private限制,并为每个成员变量都提供setter和getter方法,这才是符合规范。

 4.原则:(1)类里绝大部分成员变量应该使用@private限制,但是有些方法只是辅助实现该类的其他方法(工具方法),把这些方法定

           义在类的实现部分则可。

        (2)如果某个类要作为父类,则用@protected限制这些成员变量

        (3)希望暴露出来给其他类自由调用的方法应该在类接口部分定义,然后在类实现部分实现它们。

 */

 

#import <Foundation/Foundation.h>
#import "Person.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
       //实例化
        Person* person = [[Person alloc] init];
        //不能直接调用类,因为是@private,并且会编译错误
        //person->_age=99;
        //通过set方法才行
        [person setAge:88];
        [person setName:@"huxu123"];  //值不符合要求
        NSLog(@"姓名时:%@,年龄:%d",[person name],[person age]);
        
    }
    return 0;
}

 

//
//  Person.h
//  OC封装
//
//  Created by Goddog on 15/1/2.
//  Copyright (c) 2015年 Goddog. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Person : NSObject
//使用@private限制成员变量
{
@private
    NSString* _name;
    int _age;
}

//提供方法来操作name
-(void) setName:(NSString*) name;

//提供方法来获取_name成员变量的值
-(NSString*) name;

//提供方法来设置age
-(void) setAge:(int) age;

//提供方法来获取_age成员变量的值
-(int) age;
@end

 

//
//  Person.m
//  OC封装
//
//  Created by Goddog on 15/1/2.
//  Copyright (c) 2015年 Goddog. All rights reserved.
//

#import "Person.h"

@implementation Person

//提供方法来设置_name成员变量
-(void) setName:(NSString *)name
{
    //执行合理的验证用户名字在1至4个字之间
    if ([name length] > 4 || [name length] < 1)
    {
        NSLog(@"您设置的名字不符合要求!");
    }
    else
    {
        _name = name;
    }
}

//提供方法来获取_name成员变量的值
-(NSString*) name
{
    return _name;
}

//提供方法设置_age的值
-(void) setAge:(int)age
{
    //执行合理的验证,要求用户年龄必须在0到100之间
    if (_age != age) {
        if (age > 100 || age < 0)
        {
            NSLog(@"您设置的年龄不合法!");
        }
        else
        {
            _age = age;
        }
    }
}

//提供获取_age的方法
-(int) age
{
    return _age;
}

@end

 

Object-C技术学习,更多资源请访问 https://www.itkc8.com

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值