文档章节

OC 封装

JoshSone
 JoshSone
发布于 2016/08/16 22:50
字数 964
阅读 3
收藏 0
点赞 0
评论 0

首先介绍一下设置实例变量(setter)方法和访问实例变量(getter)的方法 ,那么问题来了,set和get方法的作用是什么呢?这里不得不提到一个概念『封装』。

我们之前使用类属性时,都会在花括号的里面加上一个 @public 。也就是说这类的属性是公开的,这时谁都可以对它进行修改,当一个类把它的属性暴露给外部的时候,那么该类就失去了对属性的控制权。

在OC语言中,使用@interface和@implementation来处理类。

就好比一款网游(具体过程复杂的多,只是举例加深理解),你看到的界面,进行的操作(如攻击,补充体力等等)都是你可以调用的方法,那么这些方法的名称的声明就是在@interface中

而你在执行操作时,程序把你的命令实现并展现在你眼前的这个过程,你是看不到的,而这就是@implementation里进行的

@interface就好像暴露在外面的时钟表面,向外界提供展示以及接口。

(类的属性在不声明的情况下默认都是@private:也就是私人的,在其他类中是无法调用的)

@implementation就好像隐藏在时钟内部的构造实现,把具体的实现封装了起来。

封装的原理就是: 让实例变量默认只能被类的对象方法所调用.

介绍了封装的作用和原理,我们回到set get方法,介绍一下set和get 方法的使用

在前面提到为了安全性考虑,我们一般不会在成员变量名前面使用 @public@@protected等关键字修饰 ,而是用set方法来为对象提供成员的值,set内部也可以对一些不合理是数据进行筛选。

set方法的作用是:为外界提供一个设置成员变量的方法。

那么我们不禁要想,既然封装是要让实例变量默认只能被对象方法调用,那么为什么我们还要一个可以让外界设置成员变量的方法呢?可以思考一下。

这里要注意几点:

*方法名必须以set开头

*set跟的成员变量名称开头首字母必须大写

*返回值一定是void

*一定要接受一个参数,而且成员变量和参数名一致

*形参名不能和成员变量名一样,苹果官方推荐成员变量名加_来进行区分,所以我们可以发现全局变量通常声明是都会加上一个下划线。

set的方法的好处是

*不让数据暴露在外,确保了数据的安全性

*对设置的数据进行过滤

set方法的实现

接下来介绍get方法

它的作用:为调用者返回对象内部的成员变量

 

get方法的声明中要注意的几点

*方法名与成员变量名一致

*返回值类型与成员变量类型一致

*不需要接受任何参数

然后实现它

在实际开发中,不一定set和get方法都会同时出现,如果我们只允许用户读取成员变量,但是不允许修改时,我们可以只提供get方法,而不提供set方法

而且成员变量名的命名以下划线开头,get方法名不需要带下划线,使用下划线开头有两个好处:

*与get方法的方法名区分开来

*可以和一些其他的局部变量区分开来,下划线开头的变量,通常都是类的成员变量。 

 

 

 

 

 

 

 

 

 

 

 

© 著作权归作者所有

共有 人打赏支持
JoshSone
粉丝 7
博文 62
码字总数 32794
作品 0
长春
iOS工程师
struct与class区别

OC: struct Class 不同点 值类型 Value Type 引用类型 reference type 结构体只能封装数据 而类可以封装数据,还可以封装行为(实现函数) 结构体变量分配在栈空间 而对象分配在堆空间 赋值为...

阿元 ⋅ 03/05 ⋅ 0

IOS进阶之WKWebView

基本使用方法 WKWebView有两个delegate,WKUIDelegate 和 WKNavigationDelegate。WKNavigationDelegate主要处理一些跳转、加载处理操作,WKUIDelegate主要处理JS脚本,确认框,警告框等。因此...

远0 ⋅ 2016/12/30 ⋅ 0

iOS 简单的使用UIBezierPath绘制

UIBezierPath这个类呢主要用于绘图。 之前的项目中需要绘图的部分都是用Core Graphics来绘制,OC是我的第一门语言,所以对于Core Graphics的C语言API不太适应,最近发现原来苹果的UIKit中已经...

沉恋 ⋅ 2015/03/20 ⋅ 0

Swift 第一日

Swift作为一门语言可以用在任何的环境之下,只需要有专门的编辑器就行。 由于项目包含旧的OC的内容,所以首先要做的便是Swift和OC的混编 新建Swift文件时,询问是否建立桥文件Bridging(如果...

樗同学 ⋅ 2016/05/28 ⋅ 0

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

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

RM_乾笙 ⋅ 05/30 ⋅ 0

Swift实际开发中遇到的小问题

从上周开始, 正式使用Swift语言进行实际项目的开发, 虽然之前Swift的语法已经了解过, 并且写过几个简单的小Demo, 但是在实际应用到了公司项目中还是遇到了一些小问题. 主要是Swift与OC语法对...

Sunxb ⋅ 2016/12/02 ⋅ 0

C/OC/Swift的数据类型没那么简单

数据类型决定了值如何存储到计算机内存中。在声明变量时也可指定它的数据类型。不同数据类型来存储不同的信息,所有变量都具有数据类型,以决定能够存储哪种数据。 C语言 C语言的基本数据类型...

CoderDancer ⋅ 2017/08/10 ⋅ 0

封装AFNetworking网络工具类(Objective-C)

AFNetworking是一款在OS X和iOS下都令人喜爱的网络库。为了迎合iOS新版本的升级, AFNetworking在3.0版本中删除了基于 NSURLConnection API的所有支持。如果你的项目以前使用过这些API,建议您...

TaciturnKnightYQ ⋅ 2015/12/08 ⋅ 0

怎么用lua调用oc的类?

@zhudusong 你好,能跟我详细讲讲这个吗?怎么用lua调用oc里封装的关于系统相机的类。

xiaoya99 ⋅ 2015/06/04 ⋅ 0

swift项目抽屉效果

使用cococaPods导入第三方MMDrawerController 库 项目中创建Podfile文件中 pod 'MMDrawerController','~>0.5.7' 终端中输入 pod install 下载类库 OC中导过后可以直接使用,但是swift中由于类...

媛美一生 ⋅ 2016/04/26 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

收集自网络的wordpress 分页导航的代码教程(全网最全版)

wordpress 分页导航是用来切换文章的一个功能,添加了 wordpress 分页导航后,用户即可自由到达指定的页面数浏览分类文章,而这样的一个很简单功能却有很多朋友在用插件:WP-PageNavi,插件的...

Rhymo-Wu ⋅ 40分钟前 ⋅ 0

微服务 WildFly Swarm 入门

Hello World 就像前面章节中的其他框架一样,我们希望添加一些基本的 Hello-world 功能,然后在其上逐步添加更多的功能。让我们从在我们的项目中创建一个 HolaResources 开始。您可以使用您的...

woshixin ⋅ 47分钟前 ⋅ 0

Maven的安装和Eclipse的配置

1. 下载Maven 下载地址 2. 解压压缩包,放到自己习惯的硬盘中 此处我将其放到了 D:\Tools 目录下。 3. 配置环境变量 右键此电脑 -> 属性 -> 高级系统设置 -> 环境变量。 在系统变量中新建,变...

影狼 ⋅ 54分钟前 ⋅ 0

python pip使用国内镜像的方法

国内源 清华:https://pypi.tuna.tsinghua.edu.cn/simple 阿里云:http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/ 华中理工大学:http://......

良言 ⋅ 54分钟前 ⋅ 0

对于url变化的spa应该如何使用微信jssdk

使用vue单页面碰上微信jssdk config验证失败的坑。第一次成功 之后切换页面全部失败,找到了解决方法,第一次验证成功后保存验证信息 切换页面时验证信息直接拿来用,加一个wx.error() 失败时...

孙冠峰 ⋅ 59分钟前 ⋅ 0

Spring Cloud Gateway 一般集成

SCF发布,带来很多新东西,不过少了点教程,打开方式又和以前的不一样,比如这个SCG,压根就没有入门指导,所以这里写一个,以备后用。 一、集成 pom.xml <dependency> <groupI...

kut ⋅ 今天 ⋅ 0

建造模式

《JAVA与模式》之建造模式

Cobbage ⋅ 今天 ⋅ 0

WePY框架开发的小程序如何在微信web开发者工具中运行起来

一、首先需要安装node.js,安装步骤如下: 首先下载安装包 https://nodejs.org/en/download/ 点击下载相应的zip版本 然后将文件夹解压到任意目录 比如我这里解压到了:C:\Program Files\node...

Helios51 ⋅ 今天 ⋅ 0

使用EnumSet 代替位域(32)

1、位域(Bit field):使用or 运算将几个常量合并到一个集合中 位操作,可以有效地执行 AND 、OR 这样的位操作 但是 位域比int 常量枚举缺点更多 2、java.util 包里面的EnumSet 类是有效的替...

职业搬砖20年 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部