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开发岗面经真题收录,希望可以帮助到大家,喜欢的朋友可 ...
随机推荐
- Path Sum,Path Sum II
Path Sum Total Accepted: 81706 Total Submissions: 269391 Difficulty: Easy Given a binary tree and a ...
- H-Index,H-Index II
1.H-Index Total Accepted: 19058 Total Submissions: 70245 Difficulty: Medium Given an array of citati ...
- W - Bitset(第二季水)
Description Give you a number on base ten,you should output it on base two.(0 < n < 1000) ...
- 给WebApp加一个“壳”,实现Andriod系统添加到桌面
IOS系统的Safari浏览器有一个“添加到桌面”的功能,能在手机桌面上为你的Webapp添加一个快捷方式,其外观和Native App看起来一样. 这个功能对Webapp来说太有用了,它能让用户像“ ...
- nodejs iconfont处理
做前端优化,iconfont可以替换掉很多图片,减少请求,并有很好的兼容性,颜色大小也有很好的自由度.现在网上已经有很多公开的iconfont供我们使用.但是每个项目有不同的应用场景,网上的并不能满足 ...
- Android中使用开源框架android-image-indicator实现图片轮播部署
之前的博文中有介绍关于图片轮播的实现方式,分别为(含超链接): 1.<Android中使用ViewFlipper实现屏幕切换> 2.<Android中使用ViewPager实现屏幕页 ...
- Font Awesome 4.0.3 字体图标完美兼容IE7
1.下载Font Awesome 4.0.3兼容包,http://www.thinkcmf.com/index.php?m=font 2.解压,并放到自己网站系统合适的位置(如果你的站已使用Font ...
- WndProc Message消息解释
public class WindowsMessage { public const int WM_NULL = 0x0000; // public const int WM_CREATE = 0x0 ...
- Problem 1008 Hay Points
Problem Description Each employee of a bureaucracy has a job description - a few paragraphs that des ...
- SSAS父子层次结构的增强-UnaryOperatorColumn属性
上次我有讲到自定义汇总,这次的内容跟上次的差不多也算是自定义汇总,实现的方式不同而已!使用的是UnaryOperatorColumn属性. 这个属性说明: 一元运算符用于将成员自定义汇总到父级,汇总运 ...