文档章节

OC 封装

JoshSone
 JoshSone
发布于 2016/08/16 22:50
字数 964
阅读 3
收藏 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
博文 76
码字总数 32794
作品 0
长春
iOS工程师
struct与class区别

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

阿元
03/05
0
0
IOS进阶之WKWebView

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

远0
2016/12/30
0
0
iOS 简单的使用UIBezierPath绘制

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

沉恋
2015/03/20
0
0
Swift 第一日

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

樗同学
2016/05/28
45
0
RAC学习三(集合类RACTuple与RACSequence)

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

RM_乾笙
05/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

又一个centos文件顺序导致的问题

背景 新的centos似乎对于文件顺序做了特别的优化 和文件顺序出现的问题确实多了不少 centos7导致的spring循环依赖【实际上和这个问题不一样 不过由此衍生出的问题】 某应用放在新的系统开始报...

Mr_Qi
15分钟前
0
0
阿里云国际版香港CN2测评 月付9美元/30M带宽/1T流量

市面上很多家香港VPS服务商,一直都说阿里云国际版香港CN2线路好,延迟低,速度快,价格便宜流量还多,那么这个香港线路到底怎么样呢?本文从性能、延时、路由、速度方面来全方面测评一下阿里...

flyzy2005
57分钟前
0
0
撤销git commit --amend

it commit -amend之后想撤销 git reset HEAD@{1}

xiaomge
今天
0
0
有意思的TimeUnit

java.util.concurrent.TimeUnit 这个类,相信童鞋们都不陌生。它是一个enum: public enum TimeUnit 好吧,我一直把它当做一个枚举类来用。偶然看到还有别的用法,大吃一斤,原来 TimeUnit 并...

polly
今天
10
0
生成pyc

Python生成pyc文件 pyc文件是py文件编译后生成的字节码文件(byte code)。pyc文件经过python解释器最终会生成机器码运行。所以pyc文件是可以跨平台部署的,类似Java的.class文件。一般py文件改...

Mr_Tea伯奕
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部