文档章节

OC学习笔记十 封装

卧龙小
 卧龙小
发布于 2014/10/12 21:35
字数 586
阅读 47
收藏 0

「深度学习福利」大神带你进阶工程师,立即查看>>>

封装的基本概念:

将实现细节隐藏起来,为外部访问提供公共的方法,避免脏数据和错误调用。


使用封装的好处:

将变化隔离,提高安全性(避免的脏数据)

例如:Cat类中有_age属性,该属性不能为零,如果不通过隐藏实现细节,则可能以赋值为不合理的数据


一声明类

@interface Cat : NSObject
{
    @private
    int _age;
    NSString *_name;
}

/*
 为什么要封装?
 如果成员变量可以直接访问的,很可能会赋值为脏数据,通过封装,
 隐藏对象属性的实现细节,仅对外提供公共的访问方法。
 
 OC一般采取封装,为成员变量提供 赋值 和 获取的方法,避免直接访问成员变量
 给成员变量赋值的方法称为 set 方法
 获取成员变量值的方法称为 get 方法
 
 */


/*
 set 方法:
 1.一定是对象方法(类方法不能访问成员变量)
 2.没用返回值
 3.方法名以set开头,后面跟上成员变量名字,去掉下划线,并且首字母大写
 4.有参数,以成员变量的类型为参数类型,并且参数名用成员变量名字,去掉下划线
 */
-(void)setAge:(int) age;

/*
 get 方法:
 1.一定是对象方法
 2.有返回值,并且返回值的类型和 成员变量 的类型一致
 3.方法名直接用去掉下划线的成员变量名
 4.没用参数
 */
-(int)age;

-(void)setName:(NSString *)name;
-(NSString *)name;

-(void)eat;
@end


二实现类

@implementation Cat

-(void)setAge:(int) age
{
    //当age<0时,则是不合理数据,则该赋值为0。
    _age=age<0?0:age;
}


-(int)age
{
    return _age;
}


-(void)setName:(NSString *)name
{
    _name=name;
}


-(NSString *)name
{
    return _name;
}


-(void)eat
{
    NSLog(@"Cat eat ..");
}

@end


三主函数

int main(int argc, const char * argv[])
{
    
    @autoreleasepool {
        //初始化实例 cat1
        Cat *cat1 = [Cat new];
        //赋值 合理的值
        [cat1 setAge:10];
        NSLog(@"cat1 age=%d",[cat1 age]);
  
        
        //初始化实例 cat2
        Cat *cat2 = [Cat new];
        //赋值 不合理的值 通过封装屏蔽掉不合理的值,这里只对成员属性进行读取器的封装。
        [cat2 setAge:-10];
        //cat2.age=100;
        NSLog(@"cat2 age=%d",[cat2 age]);
        
        
    }
    return 0;
}


四输出

2014-10-12 21:31:35.799 继承和多态[496:303] cat1 age=10
2014-10-12 21:31:35.800 继承和多态[496:303] cat2 age=0


卧龙小
粉丝 41
博文 146
码字总数 70107
作品 0
西城
程序员
私信 提问
加载中
请先登录后再评论。
我的架构演化笔记 功能1: 基本的用户注册

“咚咚”,一阵急促的敲门声, 我从睡梦中惊醒,我靠,这才几点,谁这么早, 开门一看,原来我的小表弟放暑假了,来南京玩,顺便说跟我后面学习一个网站是怎么做出来的。 于是有了下面的一段...

强子哥哥
2014/05/31
976
3
Nutch学习笔记4-Nutch 1.7 的 索引篇 ElasticSearch

上一篇讲解了爬取和分析的流程,很重要的收获就是: 解析过程中,会根据页面的ContentType获得一系列的注册解析器, 依次调用每个解析器,当其中一个解析成功后就返回,否则继续执行下一个解...

强子哥哥
2014/06/26
712
0
桌面即时贴软件--GloboNote

GloboNote 是一个桌面记事软件,可帮你创建待办事宜、提醒和其他笔记信息。无限制即时贴的数量,可分组整理,支持搜索,可定制文本的显示格式(字体、颜色和大小),可将某个即时贴始终显示在...

匿名
2013/01/21
6.9K
1
JavaScript 声效库--SFX.js

sfx.js 是一个简单的声效封装 JavaScript 包。示例: var sfxObject = new SFX( 'sound_effects/{{type}}' ); 支持: Chrome: OGG + MP3 Opera: OGG Firefox: OGG Safari: MP3 IE9: MP3......

匿名
2013/02/18
1.1K
0
Android3D应用与游戏开发框架--JQGL

JQGL 是一款针对Android设备上3D应用、游戏的开发框架。 核心功能是OpenGL-ES的使用框架,相对于大部分开发者而已,OpenGL是陌生的,没有专门研究无法进行相关的开发。 本框架针对于Android...

Jping
2013/02/21
1.6K
0

没有更多内容

加载失败,请刷新页面

加载更多

Hacker News 简讯 2020-08-15

最后更新时间: 2020-08-15 04:01 Welders set off Beirut blast while securing explosives - (maritime-executive.com) 焊工在固定炸药的同时引爆了贝鲁特爆炸 得分:215 | 评论:209 Factor......

FalconChen
今天
24
0
OSChina 周六乱弹 —— 老椅小猫秋乡梦 梦里石台堆小鱼

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @小小编辑 :《MOM》- 蜡笔小心 《MOM》- 蜡笔小心 手机党少年们想听歌,请使劲儿戳(这里) @狄工 :腾讯又在裁员了,35岁以上清退,抖音看到...

小小编辑
今天
71
1
构建高性能队列,你不得不知道的底层知识!

前言 本文收录于专辑:http://dwz.win/HjK,点击解锁更多数据结构与算法的知识。 你好,我是彤哥。 上一节,我们一起学习了如何将递归改写为非递归,其中,用到的数据结构主要是栈。 栈和队列...

彤哥读源码
今天
17
0
Anaconda下安装keras和tensorflow

Anaconda下安装keras和tensorflow 一、下载并安装Anaconda: Anaconda下载 安装步骤: 如果是多用户操作系统选择All Users,单用户选择Just Me 选择合适的安装路径 然后勾选这个,自动配置环境...

Atlantis-Brook
今天
15
0
滴滴ElasticSearch千万级TPS写入性能翻倍技术剖析

桔妹导读:滴滴ElasticSearch平台承接了公司内部所有使用ElasticSearch的业务,包括核心搜索、RDS从库、日志检索、安全数据分析、指标数据分析等等。平台规模达到了3000+节点,5PB 的数据存储...

滴滴技术
今天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部