OC 封装

一、面向对象和封装

面向对象的三大特性:封装(成员变量)、继承和多态

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

@interface就好像暴露在外面的时钟表面,像外界提供展示以及接口。@implementation就好像隐藏在时钟内部的构造实现,把具体的实现封装了起来。

二、Set方法

在开发过程中,考虑到安全性要求,我们一般不在成员变量名前面使用@public、@protected等关键字修饰,而是使用Set方法来为对象提供成员变量的值。在set方法的内部也可以对一些不合理的赋值进行筛选过滤。

Set方法的作用:为外界提供一个设置成员变量值的方法

命名规范:

(1)方法名必须以set开头

(2)Set后面跟上成员变量的名称,首字母大写

(3)返回值一定是void

(4)一定要接收一个参数,而且参数类型需要和成员变量的类型一致

(5)形参名不能喝成员变量名一样(苹果官方推荐成员变量名前加_以示区分)

Set方法的好处:

(1)不让数据暴露在外,保证了数据的安全性

(2)对设置的数据进行过滤

Set方法使用示例:

Set方法的声明:

Set方法的实现:

测试程序:

三、Get方法

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

命名规范:

(1)一定有返回值,返回值的类型和成员变量的类型一致

(2)方法名和成员变量名一样

(3)不需要接收任何参数

Get方法使用示例:

Get方法的声明:

Get方法的实现:

测试程序:

注意1:在实际的开发中,不一定set和get方法都会提供,如果内部的成员变量比如学生的学号这样的数据只允许外界读取,但是不允许修改的情况,则通常只提供get方法而不提供set方法。

注意2:成员变量名的命名以下划线开头,get方法名不需要带下划线,使用下划线开头有两个好处:(1)与get方法的方法名区分开来;(2)可以喝一些其他的局部变量区分开来,下划线开头的变量,通常都是类的成员变量。

四、Self关键字

Self是一个指针,谁调用了当前方法,self就指向谁

【出现在对象方法中,就代表着当前对象,出现在类方法中,就代表着当前类】

Self的用途:

(1)可以利用self->成员变量名访问当前对象内部的成员变量(仅在对象方法中)

(2)[self 方法名];可以调用其他的对象方法或者是类方法

五、练习

要求:设计一个成绩类

实现:

测试程序:

时间: 2024-10-12 02:34:14

OC 封装的相关文章

OC封装继承和实例化

[Person new] 做了三件事: 1)申请内存空间 2)给实例初始化 3)返回空间首地址 实例变量保存在堆区 ``指针(对象名)保存在栈区 对象方法保存在代码区 调用方法先找到p所指向的堆区的指针—isa然后再找到isa所指向的代码区的方法 对象方法只能由对象来调用,类方法只能由类来调用,不能当做函数来调用 函数属于整个文件,函数的声明可以在main内部,也可以在main函数外面,除了@interface @end之间 函数: 1)所以函数都是平行的 2)函数不存在隶属关系 3)使用时可以

oc 封装/继承/多态-一看就明白

镔哥哥就不多说,简单介绍单面: // //  Person.h //  封装继承多态 // //  Created by apple on 14/12/29. //  Copyright (c) 2014年 huweibin. All rights reserved. // /* 封装:隐藏内部实现,稳定外部接口. 封装就是定义类定义属性 定义方法 */ #import <Foundation/Foundation.h> @interface Person : NSObject //属性封装了

OC基础之3

1. try...catch...finally语句(异常处理) 作用(目的):保证程序就算出错也不崩溃先继续运行, 并且能在错误处获取错误信息 语句 1 @try{ 2 // 有可能出错的代码 3 } 4 @catch(NSException *ex){ 5 // 如果try中的代码出错, 那么就会跳转到catch代码块, 并且出错部分的地址会随之赋值给catch的参数, 也就是说, ex指向了异常部分的地址 6 // 异常处理代码都是写在这里 7 } 8 @finally{ 9 // fin

OC实现单选和多选按钮

本代码库暂时有OC封装,改天有空在补一个Swift封装的,主要是因为swift不是那么熟,怕出错,半天找不到问题多尴尬呀! 先附上demo下载地址CSDN:http://download.csdn.net/detail/qq_34863867/9593700 gitHub地址:https://github.com/SZLCode/RadioAndCheck 先上传两张效果图: 两者基本相似,只是部分逻辑不同而已,下边就以单选按钮为例,分析一下思路: 单选按钮主要有两部分构成,一部分是单选项的每一

ios开发之封装自定义的结构体对象,CGRect,CGSize常用结构体基本使用

ios 中如何使用oc封装一个 结构体到  NSValue中呢? 方法如下: typedef struct{ //自定义一个结构体 int age; int number; }Student; NSValue *stu=[NSValue valueWithBytes:&stu objCtype :@encode(Student)];//把结构体封装成一个对象 Student value2;//定义一个结构体变量来接受从NSValue得到的结构体 [stu getValue:&value2]

初识 swift 封装轮播图

一.简介 换了一家公司.换了一个环境刚开始来公司自然不能有一丝一毫的放松,每天即使是没有什么工作也是看看这个博客.那个源码.尽量让自己更充实.慢慢的开始写几篇博客记录下自己遇到的一些问题和解决方法.其实也没什么就是瞎写没有什么思路反正就是遇到问题然后解决掉.最后分享出去. 随着工作走向正规公司的项目不是那么赶.也就有时间尝试一些新的东西.只是不想刚开始编程哪会那么激进今天学这个明天学那个了.APPLE 发布 swift 有一年多了.不能说好也不能说不好.总之没有了解过时没有话语权的.所以就想试试

iOS开发 贝塞尔曲线UIBezierPath(2)

使用CAShapeLayer与UIBezierPath可以实现不在view的drawRect方法中就画出一些想要的图形 . 1:UIBezierPath: UIBezierPath是在 UIKit 中的一个类,继承于NSObject,可以创建基于矢量的路径.此类是Core Graphics框架关于path的一个OC封装.使用此类可以定义常见的圆形.多边形等形状 .我们使用直线.弧(arc)来创建复杂的曲线形状.每一个直线段或者曲线段的结束的地方是下一个的开始的地方.每一个连接的直线或者曲线段的集

复杂对象写入文件

//简单对象可以通过直接写入文件的方式进行存储,复杂对象我们无法直接写入文件,这个时候需要借助归档和反归档 //归档和反归档并不是数据持久化的方式,而是将复杂对象转化成简单对象的一种方式 Person * per = [Person new];    per.name = @"欧阳冰";    per.gender = @"神秘";    per.hobby = @"美女";    per.age = @"21";      

iOS关于CAShapeLayer与UIBezierPath的知识内容

使用CAShapeLayer与UIBezierPath可以实现不在view的drawRect方法中就画出一些想要的图形 . 1:UIBezierPath: UIBezierPath是在 UIKit 中的一个类,继承于NSObject,可以创建基于矢量的路径.此类是Core Graphics框架关于path的一个OC封装.使用此类可以定义常见的圆形.多边形等形状 .我们使用直线.弧(arc)来创建复杂的曲线形状.每一个直线段或者曲线段的结束的地方是下一个的开始的地方.每一个连接的直线或者曲线段的集