文档章节

第02天OC语言(08):对象作为方法的参数连续传递上

lyh2017iOS
 lyh2017iOS
发布于 2017/07/12 00:10
字数 392
阅读 1
收藏 0
点赞 0
评论 0

#####一、概念

// 注意 : 在企业开发中 千万不要随意修改一个方法

#####二、代码

#import <Foundation/Foundation.h>
#pragma mark 类
/*
 弹夹
 事物名称 : 弹夹(Clip)
 属性 : 子弹(Bullet)
 行为 : 上子弹(addBullet)
 */
#pragma mark - 3.弹夹

@interface Clip : NSObject
{
    @public
    int _bullet;
}
- (void)addBullet;
@end

@implementation Clip
- (void)addBullet
{
    // 上子弹
    _bullet = 10;
}
@end

#pragma mark - 2.枪
@interface Gun : NSObject
{
@public
//    int _bullet; // 子弹
    Clip *clip; // 弹夹
    
}
// 注意 : 在企业开发中 千万不要随意修改一个方法
- (void)shoot;
// 想要射击,必须传递弹夹
- (void)shoot:(Clip *)c;

@end

@implementation Gun
//- (void)shoot
//{
//    if (_bullet > 0)
//    {
//        _bullet--;
//        NSLog(@"打了一枪 %i",_bullet);
//    }
//    else
//    {
//        NSLog(@"没有子弹了,请换弹夹");
//    }
//    
//}
- (void)shoot:(Clip *)c
{

    if (c != nil) { // nul == null == 没有值
        
        // 判断有没有子弹
        if (c->_bullet > 0) {
            
            c->_bullet -=1;
            NSLog(@"打了一枪 %i",c->_bullet);
        }
        else
        {
            NSLog(@"没有子弹了");
        }
    
    }
    else
    {
        NSLog(@"没有弹夹 ,请换弹夹");
    }
}
@end
#pragma mark - 1.士兵
@interface Soldier : NSObject
{
@public
    NSString *_name;
    double _height;
    double _weight;
}
- (void)fire:(Gun *)gun;
// 开火,给士兵 一把枪,和弹夹
- (void)fire:(Gun *)g Clip:(Clip *)clip;
@end

@implementation Soldier

- (void)fire:(Gun *)g
{
    [g shoot];
}

- (void)fire:(Gun *)g Clip:(Clip *)clip
{
    // 判断是否 有枪 和子弹
    if (g != nil &&
        clip != nil) // 这里我觉得不用判断 clip是不是为空,因为我在shoot里面已经判断了,如果没有的话 就提示更换弹夹
    {
        [g shoot:clip];
    }
}
@end

#pragma mark - main函数
int main(int argc, const char * argv[])
{
    Soldier *s = [Soldier new];
    s->_name = @"lyh";
    s->_height = 1.71;
    s->_weight = 65.0;
    
    Gun *gp = [Gun new];
//    gp->_bullet = 10;
    
    // 3.创建弹夹
    Clip *clip = [Clip new];
    [clip addBullet];
    
//    [s fire:gp];
    
    [s fire:gp Clip:clip];
    
    return 0;
}

© 著作权归作者所有

共有 人打赏支持
lyh2017iOS
粉丝 1
博文 354
码字总数 137380
作品 0
朝阳
面向对象1-类

NSString类概述 NS前缀:在OC中没有命名空间的概念,在OC中为了把不同项目中的类区别开来,使用前缀;Foundation 与 Application Kit 中使用NS前缀 NSString 是OC用于表示字符串的一个类 NS...

5vinsEnt ⋅ 2016/03/31 ⋅ 0

OC运行时编程指南

OC运行时编程指南 介绍 OC这个语言尽可能的将一些决定从编译和链接时推迟到运行时。它会尽可能的的处理事情。这意味这个语言不仅需要一个编译器,还需要一个运行时系统去执行编译过的代码。这...

charsunny ⋅ 2014/02/18 ⋅ 2

OC语言的特性(一)-消息传递与调用函数的表现形式

我们在初学Objective-C时,都会觉得ObjC中的消息传递和其他语言的调用函数差不多,只是在OC中,方法调用用消息传递这一概念来代替。 那么到底怎样区别OC中的消息传递与其他语言的调用函数呢。...

浩浩老师 ⋅ 2015/09/08 ⋅ 0

Lua与ObjC的交互

写在前面 很多时候我们都需要借助一些脚本语言来为我们实现一些动态的配置,那么就会涉及到如何让脚本语言跟原生语言交互的问题。平时在网上看得比较多的是使用JS(JavaScript)与iOS原生代码...

vimfung ⋅ 2016/12/29 ⋅ 7

Swift4.0基础知识回顾

简单介绍一下Swift Swift 语言由苹果公司在 2014 年推出,用来撰写 OS X 和 iOS 应用程序,Swift语言让应用开发更简单、更快、更稳定,确保最终应用有着更好的质量更多了解Swift可以去《The...

博行天下 ⋅ 2017/12/06 ⋅ 0

Native code support (Native Code(C和C++)支持)

1. WP 8和Win 8之间共享native代码 通过 Windows 运行时组件,可以在 Windows 应用商店和 Windows Phone 应用程序之间共享Native coad。由于windows phone 8和Windows 8没有共享所有的Windo...

失足处男的倒霉孩子 ⋅ 2013/12/26 ⋅ 0

iOS OC 异常处理

一 简述 自动引用计数 ARC 默认情况下不是"异常安全的",具体来说,如果抛出异常,那么本应在作用域末尾释放的对象现在却不能自动释放,如果想生成"异常安全"的代码,可以通过设置编译器的标志...

卧龙小 ⋅ 2015/07/09 ⋅ 0

深入剖析Objective-C中的Swizzle

有时候为了达到一些特殊的需求,我们会在运行时期交换两个方法的实现,用我们自己的方法替换原始方法。在OC运行时期,OC方法被表示为一个名为Method的C结构,在runtime.h文件中,这个结构体如...

红尘未破山水间 ⋅ 2017/12/15 ⋅ 0

OC学习篇之---通知(NSNotificationCenter)

在前一篇文章中我们介绍了OC中很常用的两个技术:KVC和KVO: http://blog.csdn.net/jiangwei0910410003/article/details/41912937,今天我们来看一下OC中另外的一个常用技术:通知(Nofitication...

jiangwei0910410003 ⋅ 2014/12/14 ⋅ 0

OC学习篇之---KVC和KVO操作

前一篇文章我们介绍了OC中最常用的文件操作:http://blog.csdn.net/jiangwei0910410003/article/details/41875015,那么今天来看一下OC中的一个比较有特色的知识点:KVC和KVO 一、KVC操作 OC...

jiangwei0910410003 ⋅ 2014/12/13 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

apollo配置中心的学习笔记

公司现在配置文件太多了,导致配置文件修改起来还是非常麻烦的。在boss(业务运营支撑系统)中,配置文件是存放在jar包的,通过应用jar包来引用配置文件(区分不同环境)。这种方式虽然能够满足...

miaojiangmin ⋅ 5分钟前 ⋅ 0

Jena增删改查AP

插入、更新数据 public static void insert(){ String query = "PREFIX book: <http://www.book.com/jinyong/> \n" + " INSERT DATA \n" + ......

Vincent-Duan ⋅ 5分钟前 ⋅ 0

springMVC之与json数据交互方法

因为我也要返回json数据。所以需要这个注解@ResponseBody,把Java对象转换成json字符串 注意: 1、@RequestBody不能省,因为前台发过来的数据是json数据,得用这个注解去解析该怎么接收这些数...

颖伙虫 ⋅ 9分钟前 ⋅ 0

用实例域代替序号(31)

1、许多枚举天生就与一个单独的int 值相关联 ordinal 方法,返回枚举常量在类型中的数字位置 下述,枚举修改很不方便,不好维护 永远不要根据枚举的序数导出与他相关联的值 而是将他保存在一...

职业搬砖20年 ⋅ 11分钟前 ⋅ 0

并发编程---ConcurrentHashMap源码解析

ConcurrentHashMap是java中为了解决HashMap不能支持高并发而设计的新的实现。 ConcurrentHashMap的类结构 public class ConcurrentHashMap<K,V> extends AbstractMap<K,V> implements C......

千古一梦888 ⋅ 14分钟前 ⋅ 0

微服务 WildFly Swarm 简介

我们将看到的最后一个Java微服务框架是一个相对较新的场景,它利用了 JBoss WildFly 应用服务器中已试过且受信任的 JavaEE 功能。WildFly Swarm 是 WildFly 应用服务器的一个完整的拆下来的组...

woshixin ⋅ 19分钟前 ⋅ 0

android apk 瘦身

头条APK瘦身之路 随着版本迭代,功能增加安装包体积也会慢慢增大。 今日头条576版本APK达到了25M,通过一系列的优化,到目前的607版本为12M。本文主要是介绍头条APK瘦身中用到的一些方法。 ...

GoldenVein ⋅ 23分钟前 ⋅ 1

mac机器学习开发环境部署及helloworld

一、下载并安装Anaconda2.7 https://repo.anaconda.com/archive/Anaconda2-5.2.0-MacOSX-x86_64.pkg 路径:/Users/shijun/anaconda2 二、运行Anaconda Navigator -> Environments -> base(ro......

八戒八戒八戒 ⋅ 34分钟前 ⋅ 0

关于日常开发的经验总结(Java),持续更新中

常量尽量使用枚举来表示,这样表现力会很强,因为枚举比一个常量类要有更多的扩展性 方法的入参和出参尽量不要使用Map,因为Map会让调用者感到迷惑,他不知道你里面装的什么,面向对象的开发...

小99 ⋅ 34分钟前 ⋅ 0

IDEA创建SpringMVC+Mybatis+Maven项目

视频如下(加载有点慢请见谅,服务器不太好): 视频

影狼 ⋅ 34分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部