文档章节

OC学习笔记十 封装

卧龙小
 卧龙小
发布于 2014/10/12 21:35
字数 586
阅读 37
收藏 0
点赞 0
评论 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


© 著作权归作者所有

共有 人打赏支持
卧龙小
粉丝 42
博文 146
码字总数 70107
作品 0
西城
程序员
iOS开发博客前言

学了iOS三年多(工作方面就还不够,呵呵),所以其中看了很多文章,也从大牛那里学了不少东西,摘抄下来很多笔记,现在太乱太杂,需要整理一下。所以,接下来要写的东西,是我从学习到工作的...

kelolo ⋅ 2016/06/20 ⋅ 0

Objecitive-C中的nil

当我学习OC的时候,我总是忍不住在对比。Actionscript是如何实现,而oc又是如何实现。这不,碰到nil的时候我发现了很大的不同之处。做个笔记。 在as中,如果将一个对象置为null,相当于空指针...

ChildhoodAndy ⋅ 2013/03/21 ⋅ 3

2017年年终总结

前言 不知不觉,2017年又接近尾声了,又到了该写年终总结的时候了,往年这个时候都会熙熙攘攘,各大平台提早预热过年的气氛,而今年显得格外的平静,这可能正如我的现在的心境,波澜而不惊!...

韩俊强 ⋅ 01/03 ⋅ 0

OC学习之旅 (一) 内存管理及OC常用方法

最近学习OC,所以在博客写下自己的笔记. OC的基本: 1 id 相当于java的Object 代表任何对象. 所以id是关键字,不能用作变量!! 2 oc中使用"."符号是调用 int a =object.a 是调用的是 [object ge...

Jonson ⋅ 2013/04/13 ⋅ 2

iOS狂暴之路(开始篇)---学习路线总结

一、学习路线规划 现如今移动端的两大平台Android和iOS是风光无限,但是又有谁能够保证这两个平台能够昌盛一辈子呢?谁也不敢保证其中一个在未来几年之后就会成为第二个诺基亚,所以我们现在...

jiangwei0910410003 ⋅ 2016/09/06 ⋅ 0

RAC学习三(集合类RACTuple与RACSequence)

RAC集合类 1、RACTuple RACTuple的用法类似于OC里的数组用法,从源码来看像是NSArray的再封装,不过其宏使用比较多 RACTuple的简单用法 2、RACSequence RACSequence对数组进行遍历 1.RAC对O...

RM_乾笙 ⋅ 05/30 ⋅ 0

31 天重构学习笔记索引

由于最近在做重构的项目,所以对重构又重新进行了一遍学习和整理,对31天重构最早接触是在2009年10月份,由于当时没有订阅Sean Chambers的blog,所以是在国外的社区上闲逛的时候链接过去的。...

晨曦之光 ⋅ 2012/03/09 ⋅ 0

Swift学习第二练——Swift项目时光电影

Swift学习第二练——Swift项目时光电影 很早以前的一个OC的练习项目,用swift重新写了一遍,因为xcode版本的更新对swift的兼容度也在不断改变,此版本适用于xcode6.1。 这个项目中,用swift...

珲少 ⋅ 2015/06/28 ⋅ 0

标准TVL格式数据解析

TLV格式数据解析。 什么是TLV数据?传送门:http://blog.csdn.net/chexlong/article/details/6974201 在标准的TLV数据解析过程中会遇到很多问题。在目前的开源的C/C 的项目中代码十分的庞大,...

红薯 ⋅ 2013/12/04 ⋅ 0

OC学习笔记七 判断结构

OC 提供以下判断 1.if 2.switch 3.conditional 一.if 语句 if 是OC 提供的一种常用判断语句,语句格式如下 if(expression) program statemen if 语句根据指定条件,限制程序执行例如 if(c...

卧龙小 ⋅ 2014/09/22 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

linux 安装docker

通过以下命令下载安装docker wget -qO- https://get.docker.com | sh 执行以上命令后输出以下内容说明安装成功,注意红框中的内容,docker安装成功后默认只有root能使用,红框中给出的提示是...

haoyuehong ⋅ 14分钟前 ⋅ 0

482. License Key Formatting - LeetCode

Question 482. License Key Formatting Solution 思路:字符串转化为char数组,从后遍历,如果是大写字母就转化为小写字母,如果是-就忽略,如果遍历了k个字符(排除-)就追加一个-。 Java实现...

yysue ⋅ 33分钟前 ⋅ 0

聊聊spring cloud gateway的LoadBalancerClientFilter

序 本文主要研究一下spring cloud gateway的LoadBalancerClientFilter GatewayLoadBalancerClientAutoConfiguration spring-cloud-gateway-core-2.0.0.RELEASE-sources.jar!/org/springfram......

go4it ⋅ 57分钟前 ⋅ 0

详解:Nginx反代实现Kibana登录认证功能

Kibana 5.5 版后,已不支持认证功能,也就是说,直接打开页面就能管理,想想都不安全,不过官方提供了 X-Pack 认证,但有时间限制。毕竟X-Pack是商业版。 下面我将操作如何使用Nginx反向代理...

问题终结者 ⋅ 今天 ⋅ 0

002、nginx配置虚拟主机

一、nginx配置虚拟主机可分为三种方式,分别为: 1、基于域名的虚拟主机,通过域名来区分虚拟主机——应用:外部网站 2、基于端口的虚拟主机,通过端口来区分虚拟主机——应用:公司内部网站...

北岩 ⋅ 今天 ⋅ 0

shell脚本之死循环写法

最近在学习写shell脚本,在练习if while等流程控制时,突然它们的死循环写法是怎么样的?经过百度与亲测记录如下: for死循环 #! /bin/bashfor ((;;));do date sleep 1d...

hensemlee ⋅ 今天 ⋅ 0

苹果的ARKit2.0有多可怕,看了就知道

序言 ARKit主要由三部分组成: 跟踪(Tracking) 跟踪是ARKit的核心组件之一,其提供了设备在物理世界中的位置与方向信息,并对物体进行跟踪,如人脸。 2.场景理解(Scene Understanding) 场...

_小迷糊 ⋅ 今天 ⋅ 0

5.1 vim介绍 5.2 vim移动光标 5.3 ,5.4vim一般模式下移动光标,复制粘贴

vim命令 vim是vi的一个升级版;vim可以显示文字的颜色 安装vim这一个包vim-enhanced 如果不知道安装包,可以使用 命令下面命令来查看vim命令是那个包安装的。 [root@linux-128 ~]# yum prov...

Linux_老吴 ⋅ 今天 ⋅ 0

vim一般模式

vim 是什么 vim是什么 ? 在之前接触Linux,编辑网卡配置文件的时候我们用过了vi ,vim简单说就是vi的升级版,它跟vi一样是Linux系统中的一个文本编辑工具。 如果系统中没有vim ,需要安装一...

李超小牛子 ⋅ 今天 ⋅ 0

docker实战

构建企业级Docker虚拟化平台实战 重点剖析虚拟化和云计算概念; 分析Docker虚拟化的概念和原理; 从0开始实战Docker虚拟化平台; 基于Docker构建Nginx WEB服务器和CentOS虚拟机; 基于开源监...

寰宇01 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部