文档章节

2015-10-13 OC语言中的复合

尘埃眠于光年yr
 尘埃眠于光年yr
发布于 2015/10/13 16:41
字数 479
阅读 5
收藏 0

复合,就是对象之间的组合,它不限制对象的个数,但至少有两个对象。

复合时,将要复合的对象(类实例化)的头文件导入被复合的类的头文件中,并在接口中定义复合对象的对象类型和设置方法的声明。

具体细节用实例说明;

如 现在有一个汽车,它由轮胎和引擎组成

main.m

#import <Foundation/Foundation.h>

#import "Car.h"

#import "Engine.h"

#import "Tire.h"


int main() {

   

    //实例化一个Car对象

    Car *car = [[Car alloc]init];

    

    //实例化一个Engine对象

    Engine *engine = [[Engine alloc]init];

    

    // 实例化一个Tire对象

    Tire *tire = [[Tire alloc]init];

    

    //给汽车设置发动机

    [car setEngine:engine];

    //给汽车设置轮胎

    [car setTire:tire];

    

    //汽车调用自身接口里面的方法

    [car describeCar];

        

}


Engine.h:

#import <Foundation/Foundation.h>


@interface Engine : NSObject


 //engine的方法声明

-(NSString *) describeI;


@end


Engine.m:

#import "Engine.h"


@implementation Engine


//engine 的方法的实现

-(NSString *)describeI

{

    return @"发动机";

}


@end


Tire.h

#import <Foundation/Foundation.h>


@interface Tire : NSObject


//tired的方法声明

-(NSString *) describeII;



@end


Tire.m:

#import "Tire.h"


@implementation Tire


//tire的方法实现

-(NSString *)describeII

{

   return @"轮胎";

    // 也可以返回一句话

    //return @"我是一个轮胎";

}


@end


Car.h:

#import <Foundation/Foundation.h>

// 头文件中导入enginetire

#import "Engine.h"

#import "Tire.h"


@interface Car : NSObject

{

    //Car类里面设置以类为返回类型的类属性,之前的一般是基本的几种数据类型,规则和之前设置类属性时一样。

    Engine * _engine;

    Tire * _tire;

}


// 设置引擎方法的声明

-(void) setEngine : (Engine *) engine;

-(Engine *) engine;


//设置轮胎方法的声明

-(void) setTire : (Tire *) tire;

-(Tire *) tire;


//设置汽车对象的方法声明

-(void) describeCar;

@end


Car.m:

#import "Car.h"


@implementation Car


//引擎方法的实现

-(void)setEngine:(Engine *)engine

{

    _engine = engine;

}


-(Engine *)engine

{

    return _engine;

}


//轮胎方法的实现

-(void)setTire:(Tire *)tire

{

    _tire = tire;

}


-(Tire *)tire

{

    return  _tire;

}


//汽车对象方法的实现

-(void) describeCar

{

    NSLog(@"我是一辆车,我有%@%@.",[_engine describeI],[_tire describeII]);

}

@end





© 著作权归作者所有

共有 人打赏支持
尘埃眠于光年yr
粉丝 0
博文 15
码字总数 13635
作品 0
西安
【IOS开发笔记02】学生管理系统

端到端的机会 虽然现在身处大公司,但是因为是内部创业团队,产品、native、前端、服务器端全部坐在一起开发,大家很容易做零距离交流,也因为最近内部有一个前端要转岗过来,于是手里的前端...

范大脚脚
2017/11/17
0
0
如何实现iOS热更新

如何实现iOS热更新 字数803 阅读7169 评论19 喜欢42 最近被苹果审核整怕了,每次提交版本都得等待一周到两周的审核时间,我是受不了这种速度了,于是决定研究有没有其他的方法跳过提交版本这...

法斗斗
2016/08/15
9
0
iOS 单例模式全面解析

我先列举一个苹果官方文档中的写法。 static AccountManager *DefaultManager = nil; + (AccountManager *)defaultManager { if (!DefaultManager) DefaultManager = [[self allocWithZone:N......

coderHan
2015/12/13
27
0
2015 年开源中国新增 6000 款软件盘点

刚刚过去的2015年,开源中国总共新增收录软件 5977款,这些软件主要来自作者、用户的投递,以及我们在国内外网站发现的有价值的开源软件。根据这批新增软件所使用的编程语言、功能分类等方面...

oschina
2016/01/14
5.5K
23
简述如何从Objective-C到Swift过渡

本篇文章简述了如何从Objective-C向Swift过渡。话不多说,开门见山。 注意:本文讨论的开发环境为Xcode 6 beta 2版本。 单一文件结构 VS 接口-实现 最值得一提的一大改动便是在Objective-C中...

牵着蜗牛去西藏
2014/11/04
170
0

没有更多内容

加载失败,请刷新页面

加载更多

ArrayList嘿嘿嘿

数组扩容技术: //扩容技术 将原数组objs类容复制到新数组并且长度为11 Object[] newObjs = Arrays.copyOf(objs,11); 数组比较大那么System.arraycopy比较有优势,因为其使用的是内存复制,省...

熊猫你好
18分钟前
1
0
Android平台下的一个好用的日历库(sxtwl_cpp),支持农历转公历,和公历转农历等功能

python版的sxtwl_cpp传送入口 在build.gradle的allprojects中加入 maven { url 'https://dl.bintray.com/yuangu/sxtwl' } 最终如下面代码所示: allprojects { repositories { ......

元谷
28分钟前
9
0
Redis常用命令

keys 我把这个命令放在第一位,是因为笔者曾经做过的项目,以及一些朋友的项目,都因为使用keys这个命令,导致出现性能毛刺。这个命令的时间复杂度是O(N),而且redis又是单线程执行,在执行k...

谢思华
45分钟前
2
0
关于css宽度分离

所谓宽度分离就是width 属性不与影响宽度的 padding/border(有时候包括 margin)属性共存 例如: .box{width:200px;padding:20px;border:1px solid;} 为何要做宽度分离 一说到分离就是为了好...

莫西摩西
55分钟前
1
0
Linux常用命令

###############常用命令说明############################## cat /proc/version 显示内核的版本 mv dir1 new_dir 重命名/移动 一个目录 rm -rf a.txt b.txt c.txt 删除多个文件 chmod 777 ......

lyle_luo
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部