pragma mark 封装
pragma mark 概念
/*
封装:屏蔽内部实现的细节, 仅仅对外 提供公共的方法/接口]
好处: 保证数据的安全性
将变化 隔离
规范: 一般情况下, 不会对外直接暴露成员变量,都会提供 一些公共的方法进行赋值
成员变量都需要封装起来
*/
pragma mark 代码
#import <Foundation/Foundation.h>
#pragma mark 类
#import "Gun.h"
#pragma mark main函数
int main(int argc, const char * argv[])
{
#pragma mark 封装
// 1.创建一把枪
Gun *gun = [Gun new];
// 2.设置枪的子弹数量
#warning 成员变量public 说明 赋值不受我们约束 解决办法:通过封装(通过方法去封装)
// 引发这个问题的原因: 因为成员变量是 public的,所以给成员变量赋值的时候,赋值的值不受我们的约束
// 如何解决这个问题? 让成员变量 受我们的约束
// gun->_bullet = -100;
#warning 调用 封装的赋值方法
[gun addBullet:100];
// 3.射击
[gun shoot];
// 4.查看子弹的剩余数据(获取成员变量的值)
// NSLog(@"bullet = %i",gun->_bullet);
#warning 调用 封装的返回成员变量的方法
NSLog(@"bullet = %i",[gun 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
Gun.m
#import "Gun.h"
@implementation Gun
- (void)shoot
{
if (_bullet >0) {
_bullet--;
NSLog(@"打了一枪, 还剩下%i子弹",_bullet);
}
else
{
NSLog(@"没有子弹了");
}
}
#pragma mark 赋值的封装
// 提供一个方法用于设置成员变量的值
// addBullet 就是对成员变量的封装
- (void)addBullet:(int)count
{
#warning 封装
/*
封装:屏蔽内部实现的细节, 仅仅对外 提供公共的方法/接口]
好处: 保证数据的安全性
将变化 隔离
规范: 一般情况下, 不会对外直接暴露成员变量,都会提供 一些公共的方法进行赋值
成员变量都需要封装起来
*/
// 对传入的数据进行 过滤
if (count < 0)
{
count = 0;
}
_bullet = count;
}
#pragma mark 封装 返回成员变量的值
// 提供一个方法用于返回成员变量的值
- (int)getBullet
{
return _bullet;
}
@end