OC——封装(初级与高级)
所谓的封装,就是通过定义方法或者函数去操作成员属性或者成员变量,而不是直接通过指针方式去操作。借此达到提高代码安全性,代码可行性以及代码执行效率的目的。
1:初级封装,对成员变量进行封装。
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
// @public
int age;
NSString *name;
}
- (id) init;
- (void) setAge:(int) newAge;
- (void) setName:(NSString *) newName; @end @implementation Person
- (id) init
{
if (self = [super init]) {
age = 20;
name = @"jerry";
}
return self;
} - (void) setAge:(int)newAge
{
if (age == 0)
{
age = 20;
}
age = newAge;
} - (void) setName:(NSString *)newName
{
name = newName;
} //对name和age方法同时进行封装,不需要在.h文件中提前定义
- (void) setName:(NSString *)newName andAge:(int)newAge
{
age = newAge;
name = newName;
} @end int main(int argc, const char * argv[]) {
@autoreleasepool {
//方法一:通过指针来修改age的值,但存在不稳定性,因为只能访问Person类中的public属性,并非随时都有效。而且缺乏安全性
//并且当age的名字改变时,容易因未及时修改而造成无法调用。
Person *p = [[Person alloc]init];
p -> age = 10;
//方法二:通过调用set方法来修改age的值,稳定安全。并且可以在set方法中添加限制,提高代码安全性。
[p setAge:10];
[p setName:@"nick" andAge:21];
}
return 0;
}
2:高级封装,对整个类进行封装
无法再通过方法一来实现修改。
#import <Foundation/Foundation.h>
@interface Computer : NSObject
{
int cpu;
int inch;
}
@end
@implementation Computer
//进行二次封装
- (void) setCpu:(int)newCpu
{
cpu = newCpu;
} - (void) setInch:(int)newInch
{
inch = newInch;
}
@end @interface Person : NSObject
{
Computer *Mac;
} @end @implementation Person - (void) setMac:(Computer *)newMac
{
[self setnewMac:(Computer *)newMac];
}
//即便之后setMac的名字改变,也可以通过self来接洽而无需修改main.m
- (void) setnewMac:(Computer *)newMac
{
Mac = newMac;
} @end int main(int argc, const char * argv[]) {
@autoreleasepool {
Person *p = [[Person alloc]init];
Computer *Mac = [[Computer alloc]init];
[Mac setCpu:64];
[Mac setInch:15];
[p setMac:Mac];
}
return 0;
}
OC——封装(初级与高级)的更多相关文章
- 马哥linux运维初级+中级+高级 视频教程 教学视频 全套下载(近50G)
马哥linux运维初级+中级+高级 视频教程 教学视频 全套下载(近50G)目录详情:18_02_ssl协议.openssl及创建私有CA18_03_OpenSSH服务及其相关应用09_01_磁盘及文 ...
- 渗透测试工具Nmap从初级到高级使用教程
本文由阿德马翻译自国外网站,请尊重劳动成果,转载请注明出处,谢谢 Nmap是一款网络扫描和主机检测的非常有用的工具.Nmap是不局限于仅仅收集信息和枚举,同时可以用来作为一个漏洞探测器或安全扫描器.它 ...
- 渗透测试工具Nmap从初级到高级
Nmap是一款网络扫描和主机检测的非常有用的工具. Nmap是不局限于仅仅收集信息和枚举,同时可以用来作为一个漏洞探测器或安全扫描器.它可以适用于winodws,linux,mac等操作系统.Nmap ...
- 引用面试官文章 :如何准备Java初级和高级的技术面试
本人最近几年一直在做java后端方面的技术面试官,而在最近两周,又密集了面试了一些java初级和高级开发的候选人,在面试过程中,我自认为比较慎重,遇到问题回答不好的候选人,我总会再三从不同方面提问,只 ...
- 天草(初级+中级+高级)VIP和黑鹰VIP破解教程(全部iso下载地址)
以下就是我收集的教程地址,之前我收集到的都是一课一课下载的,虽然这样,我也下载完了天草的全部课程.这里分享的是在一起的iso文件,比起一课课下载爽多了.~~ 还有这些教程都是从零起点开始教的,不用担心 ...
- JavaWeb初级进阶高级学习方向计划
阶段1 语言基础 课程一.Java负基础扫盲课 1.初识Java 本课程从java开发环境配置开始,讲解了java语法基础 .类和面向对象.面向对象编程三大特性:封装.继承.多态.建议零基础学员从本课 ...
- OC封装的TLV数据格式解析库
作者:朱克锋 邮箱:zhukefeng@iboxpay.com 转载请注明出处:http://blog.csdn.net/linux_zkf TLV是一种可变格式,意思就是: Type类型, Leng ...
- java 面试,java 后端面试,数据库方面对初级和高级程序员的要求
本内容摘自 java web轻量级开发面试教程 对于合格的程序员,需要有基本的数据库操作技能,具体体现在以下三个方面. l 第一,针对一类数据库(比如MySQL.Oracle.SQL Server等 ...
- 2020腾讯Android岗初级到高级面试真题收录解析
前言 马上就要到金九银十面试季了,需要找工作的小伙伴可以开始刷题复习了. 今天给大家分享的是博主腾讯面试的面经以及对腾讯2020上半年Android开发岗面经真题收录,希望可以帮助到大家,喜欢的朋友可 ...
随机推荐
- AlertDialog详解
参考地址:http://blog.csdn.net/woaieillen/article/details/7378324 1.弹出提示框 new AlertDialog.Builder(LoginAc ...
- Android studio教程:[5]活动的生命周期
想要学好安卓开发,就必须理解安卓软件的生命周期,明白一个活动的创建.启动.停止.暂停.重启和销毁的过程,知道各个阶段会调用什么函数进行处理不同的情况,这里我就通过一个简单的例子让大家明白一个活动的生命 ...
- C++中vector和list排序
容器.泛型算法.和类是不是就是C++相对于C"++"的那部分呢?暂时先这么认为吧.如果这篇博客有幸被别人看到,请帮忙指出.--C++ 菜鸟 留. vector的迭代器是随机访问迭代 ...
- T - 阿牛的EOF牛肉串(第二季水)
Description 今年的ACM暑期集训队一共有18人,分为6支队伍.其中有一个叫做EOF的队伍,由04级的阿牛.XC以及05级的COY组成.在共同的集训生活中,大家建立了深厚的 ...
- C#生成缩略图的方法
1.需要添加应用System.Drawing.dll 2.命名空间 using System.IO; using System.Drawing; using System.Drawing.Imagin ...
- Python之路第八天,基础(9)-面向对象(下)
类的成员 类的成员可以分为三大类:字段.方法和属性 注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存中就有多少个普通字段.而其他的成员,则都是保存在类中,即:无论对象的 ...
- 在右键添加Cmder here选项,添加启动Cmder的快捷键
右键菜单添加“Cmder here” 打开cmder,在其中输入: cmder /register user 或 cmder /register all 即可 设置启动cmder的快捷键 右键 C ...
- Android中Handle详解
上图为本人总结的Handler,网上发现一片总结很好的博客就copy过来:作为参考 Handler有何作用?如何使用? 一 .Handler作用和概念 包含线程队列和消息队列,实现异步的消息处理机制, ...
- javascript总结--2014-04-17
HTML DOM Function Data http://www.oschina.net/translate/learning-javascript-design-patterns?cmp& ...
- QT:程序忙碌时的进度条——开启时间循环,等结束的时候再退出
当程序在执行一项(或多项)耗时比较久的操作时,界面总要有一点东西告诉用户“程序还在运行中”,那么,一个“没有终点”的进度条就是你需要的了.PS:最好把耗时的操作扔到一个子线程中去,以免他阻塞了界面线程 ...