文档章节

第03天OC语言(01):封装基本概念

lyh2017iOS
 lyh2017iOS
发布于 2017/07/13 11:18
字数 606
阅读 3
收藏 0
点赞 0
评论 0
  • 不要等到明天,明天太遥远,今天就行动。

#####须读:看完该文章你能做什么?

什么是封装,封装有什么好处

#####学习前:你必须会什么?(在这里我已经默认你具备C语言的基础了)

适合所有人,不需要懂的什么 ######注:(小白直接上手)


#####一、本章笔记

 为什么要封装
    成员变量是public 给成员变量赋值的时,赋值的值 不受我们约束(控制)

     封装 : 屏蔽内部实现的细节,仅仅对外提供 共有的方法/接口
     好处 : 保证 数据的安全性
     将变化隔离
     规范 : 一般情况下 不会对外直接暴露成员变量,都会提供一些 共有的方法进行赋值
     成员变量都需要封装起来

#####二、code ######main.m

>>>main.m
#pragma mark 01-封装基本概念
#pragma mark - 代码
#import <Foundation/Foundation.h>
#pragma mark 类

#import "Gun.h"

#pragma mark - main函数
int main(int argc, const char * argv[])
{
    // 1.创建一把枪
    Gun *gp = [Gun new];
    // 2.设置枪的子弹数量
//    gp->_bullet = 100;
#warning 引发这个问题的原因, 因为成员变量是public 给成员变量赋值的时,赋值的值 不受我们约束(控制)
//    gp->_bullet = -100;
    [gp addBullet:100];
    // 3.射击
    [gp shoot];
    
    // 4.查看子弹的剩余数量(获取成员变量的值)
//    NSLog(@"bullet = %i",gp->_bullet);
    NSLog(@"bullet = %i",[gp getBullet]);

    return 0;
}

######Gun

>>>.h
#import <Foundation/Foundation.h>

@interface Gun : NSObject
{
//    @public
    int _bullet; // 子弹
    // 虽然成员变量 不是public之后 外界不能直接访问了,但是还是可以在本类的对象方法中直接访问
}
// 射击方法
- (void)shoot;


// 提供一个方法用于设置成员变量的值
- (void)addBullet:(int)count;

// 提供一个方法 用于 返回成员变量的值
- (int)getBullet;

@end
>>>.m
#import "Gun.h"
@implementation Gun
- (void)shoot
{
    if(_bullet > 0)
    {
        _bullet--;
        NSLog(@"打了一枪,还剩%i子弹",_bullet);
    }
    else
    {
        NSLog(@"没有子弹");
    }
    
}
// addBullet 就是对成员变量的封装
/*
 封装 : 屏蔽内部实现的细节,仅仅对外提供 共有的方法/接口
 好处 : 保证 数据的安全性
        将变化隔离
 规范 : 一般情况下 不会对外直接暴露成员变量,都会提供一些 共有的方法进行赋值
        成员变量都需要封装起来
 */
- (void)addBullet:(int)count
{
    // 对传入的数据进行过滤
    if (count < 0) {
        count = 0;
    }
    _bullet = count;
}

- (int)getBullet
{
    return _bullet;
}
@end

© 著作权归作者所有

共有 人打赏支持
lyh2017iOS
粉丝 1
博文 357
码字总数 137380
作品 0
朝阳
JavaScript 30天每日效果图

JavaScript 30天每日效果图 在Github上看到了wesbos的一个Javascript30天挑战的repo,旨在使用纯JS来进行练习,不允许使用任何其他的库和框架,该挑战共30天,我会在这里复现这30天遇到的挑战...

黎跃春
2017/07/19
0
0
iOS 简单的使用UIBezierPath绘制

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

沉恋
2015/03/20
0
0
Object-C基础-01-概述

回到顶部 前言 目前来说,Objective-C(简称OC)是iOS开发的核心语言,在开发过程中也会配合着使用C语言、C++,OC主要负责UI界面,C语言、C++可用于图形处理。近来,流传Ruby、C#也可以开发iOS...

Corwien
2016/03/16
33
0
Objective-C中的预处理器指令与宏

引 什么是预处理器,跟我有什么关系? 预处理器是在OC源文件编译过程中的一个部分,而且是第一个处理部分,预处理器的预也由此可见。 整个编译过程可以大致分为:预处理器进行词法分析 -> 语...

cloudox_
2017/04/26
0
0
Runtime运行时机制

想深入理解Objective-C这门动态语言就不得不深入理解下它的“动态”是如何实现的。早先拜读过《Effective Objective-C 2.0》就让我更深入的窥探到OC运行时特别之处,本文当中也有部分内容借鉴...

Mister志伟
2017/12/11
0
0
iOS中@selector的runtime过程

大家都知道oc是动态语言,是runtime的,怎么体现他的动态性呢,今天用SEL来分析下,之前分享过钩子其实就可以看出来了,现在具体看看OC是怎么通过SEL找到函数的。 [self performSelector:@s...

余成海
2015/05/06
0
0
【iOS】Swift类与结构、存储属性、计算属性、函数与方法、附属脚本等

写了12个Person来复习,不过完成同样的代码需要敲键盘的次数相比OC确实少了很多,这很多应该归功于Swift中不写分号,以及少了OC中的中括号。 一、类与结构体 两者在Swift中差不了多少了 类与...

xn4545945
2014/09/16
0
0
从前端到全端:JavaScript逆袭之路

背景 近年来,前端技术日新月异,前端已经不仅仅是网页,更多的开始由狭义向广义发展。 先后涌现出了具备后端能力的node,具备移动开发能力的react native,具备游戏渲染能力的cocos2d-js,以...

做不一样的自己
2017/11/01
0
0
C/OC/Swift的数据类型没那么简单

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

CoderDancer
2017/08/10
0
0
面向对象-类

代码编写 定义一个Car类,拥有2个属性:轮子数、时速,1个行为:跑 类名属性的命名规则:标示符的规则 类名的命名规范:有意义、驼峰标识、首字母大写 #import <Foundation/Foundation.h> //...

5vinsEnt
2016/04/15
16
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

联动滑动之一:NestScrollChild和NestedScrollingParent

NestScrollChild和NestedScrollingParent 吐槽一下开源中国竟然标题字数有限制 由于项目中使用了CoordinateLayout来解决联动以及实现炫酷的UI效果,那么必须就要研究一波源码了,毕竟知其然知...

JerryLin123
19分钟前
0
0
cloudera spark2.2 读写hbase

cloudera spark2.2 读写hbase 例子 host = 'bigdata-03,bigdata-05,bigdata-04'conf = { "hbase.zookeeper.quorum": host, "hbase.mapreduce.inputtable": "student1"}k......

osenlin
24分钟前
0
0
数据库规范化

转载自 一个小时学会MySQL数据库 地址:http://www.cnblogs.com/best/p/6517755.html 截取其中 1.4 部分 用于自己学习使用 感谢作者:张果 1.4、数据库规范化 经过一系列的步骤,我们现在终于...

十万猛虎下画山
25分钟前
0
0
ios逆向之工具篇

Reveal:查看任意app的UI结构 注:1.不越狱的手机,可以用Reveal来查看自己app的UI结构,不能查看其它app的结构。 2.越狱手机上可以查看任意app的UI结构。 IDA:反编译工具 从App Store下载的...

HeroHY
25分钟前
0
0
EOS区块链平台智能合约示例HelloWorld

我们将介绍一个使用EOS智能合约构建hello World的例子。 一般环境设置通过上一篇文章已经说明,这方面的问题大家可以看本博客上一篇文章,本文引用了官方EOS在Git上的示例。 运行nodeos 要通...

笔阁
27分钟前
0
0
Scrapy爬虫框架简单解析 

scrapy框架解析 Scrapy框架大致包括以下几个组件:Scrapy Engine、Spiders、Scheduler、Item Pipeline、Downloader; 组件 Scrapy Engine 这是框架的核心,负责控制数据流在整个系统的各个组...

zhujun2017
28分钟前
0
0
Vue之ref详解与实例

尽管存在 prop 和事件,有的时候你仍可能需要在 JavaScript 里直接访问一个子组件。为了达到这个目的,你可以通过 ref 特性为这个子组件赋予一个 ID 引用。ref可以加在父级组件上也可以加在子...

tianyawhl
36分钟前
0
0
Aerospike入坑导读

Aerospike是一个以分布式为核心,T级别大数据高并发的结构化数据存储解决方案,读写操作达微妙级,索引内存化数据固态化,自动感知集群状态,节点间数据强一致性,平滑扩展以及丰富的开发语言...

厉力文武
46分钟前
7
0
基于微信的libco实现php的协程扩展

php扩展cop (兼容php7) git clone https://github.com/qieangel2013/cop 基于libco简单实现的协程/usr/local/php/bin/phpize./configure --with-php-config=/usr/local/php/bin/php-c......

mickelfeng
49分钟前
0
0
Django 01

一 什么是web框架? 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,简单地说,就是你用别人搭建好的舞台来做表演。 ...

Kefy
49分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部