在Objective-C中复合是通过包含作为实例变量的对象指针实现的

严格来说,只有对象间的组合才叫复合

--------------------Car.h---------------------------

#import <Foundation/Foundation.h>

#import "Wheel.h"

@interface Car : NSObject

@property Wheel *wheel1;

@property Wheel *wheel2;

@property Wheel *wheel3;

@property Wheel *wheel4;

/*

1.如果复合的属性是另外一个类的类型,那么在使用之前记得初始化该属性

2.如果想要在[内部没有初始化复合属性]的前提下使用的话,需要传入的参数必须是已经初始化过的

*/

@end

-------------------Car.m-------------------------

#import "Car.h"

@implementation Car

//内部初始化复合属性

- (instancetype)init

{

self = [super init];

if (self) {

self.wheel1 = [[Wheel alloc] init];

self.wheel2 = [[Wheel alloc] init];

self.wheel3 = [[Wheel alloc] init];

self.wheel4 = [[Wheel alloc] init];

}

return self;

}

- (NSString *)description

{

return [NSString stringWithFormat:@"\nwheel1.type:%@  \nwheel2.type:%@  \nwheel3.type:%@  \nwheel4.type:%@", self.wheel1.type, self.wheel2.type, self.wheel3.type, self.wheel4.type];

}

@end

---------------------Wheel------------------------

#import <Foundation/Foundation.h>

@interface Wheel : NSObject

@property NSString *type;

@end

#import "Wheel.h"

@implementation Wheel

@end

--------------------测试文件--------------------------

#import <Foundation/Foundation.h>

#import "Wheel.h"

#import "Car.h"

int main(int argc, const char * argv[]) {

@autoreleasepool {

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

//        外部初始化复合属性

//        Wheel *wheel1 = [[Wheel alloc] init];

//        wheel1.type = @"法拉利的轮子1";

//        Wheel *wheel2 = [[Wheel alloc] init];

//        wheel2.type = @"法拉利的轮子2";

//        Wheel *wheel3 = [[Wheel alloc] init];

//        wheel3.type = @"法拉利的轮子3";

//        Wheel *wheel4 = [[Wheel alloc] init];

//        wheel4.type = @"法拉利的轮子4";

//

//        car.wheel1 = wheel1;

//        car.wheel2 = wheel2;

//        car.wheel3 = wheel3;

//        car.wheel4 = wheel4;

car.wheel1.type=@"宝马的轮子1";

car.wheel2.type=@"宝马的轮子2";

car.wheel3.type=@"宝马的轮子3";

car.wheel4.type=@"宝马的轮子4";

NSLog(@"%@",car);

}

return 0;

}

OC 复合的更多相关文章

  1. OC 复合 组装电脑

    键盘类 #import <Foundation/Foundation.h> @interface Keyboard : NSObject @property(strong,nonatomi ...

  2. OC 类簇与复合

    OC 类簇与复合 类簇: 类簇是Foundation框架中广泛使用的设计模式.类簇将一些私有的.具体的子类组合在一个公共的.抽象的超类下面,以这种方法来组织类可以简化一个面向对象框架的公开架构,而又不 ...

  3. 【《Objective-C基础教程 》笔记ch05】(六)OC中的复合机制Composition

     1.复合通过包括作为实例变量的的对象指针实现的.        @interface Unicycle : NSObject        {           Pedal*pedal;     ...

  4. OC中的复合

    #import <Foundation/Foundation.h> #import "Car.h" int main(int argc, const char * ar ...

  5. oc必须知道的知识点

    id数据类型 1.通用的指针类型 2.没有*号 3.使用id类型时,不能给对象的属性或成员变量进行赋值 4.可以对其发送任何(存在的)消息   import与@class的区别 1.import会包含 ...

  6. iOS - OC 面向对象语法

    1.类 1)根类:因为类 NSObject 是层次结构的最顶层,因此称为根类. 可以将类称为子类(subclass)和父类(superclass),也可以将类称为子类和超类. 2)分类/类别(cate ...

  7. Swift基本语法以及与OC的比较

    一.注释: 1.单行注释和OC一致. 2.块注释中有与OC不同点:可以嵌套注释 二.常量和变量: 1.常量:初始化后可读不可写 let 2.变量:初始化后可读可写 var //不需要指定类型,系统会自 ...

  8. OC基础-第1天

    #pragma mark - Day01_01_OC语言的历史(了解) 1) Objective - C 是一门面向对象的高级语言 2) Objective - C 简称 obj - C  \  OC ...

  9. oc总结

    OC10天大纲 一.类和对象 1.什么是类? 同一种对象的抽象就是类. 2.什么是对象? 世界上的任何事物都可以称为对象,每个对象都有他自己的属性和行为. 3.如何创建一个类(请把一个.h和一个.m粘 ...

随机推荐

  1. Python入门之字符编码

    一.字节编码的基础知识 一.计算机基础知识 #1 我们的程序都是运行在特定的操作系统内,例如window,linux,mac等等#2 运行应用程序,需要要操作系统发出请求,我们双击运行的时候会向操作系 ...

  2. Java 实现后缀xls文件读取

    Java 实现后缀xls文件读取 一.开发环境 poi采用的3.9版本 + JDK1.6 + Myeclipse 二,JAR包 三.实现代码 实体类:UserRoleBean package nc.x ...

  3. Python3基础 bool类型变量赋值

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  4. 微内核VS宏内核【转】

    本文转载自:https://segmentfault.com/a/1190000002711544 内核按照体系结构分为两类 : 微内核(microkernel)与宏内核(macrokernel). ...

  5. linux下有线网卡出现ADDRCONF(NETDEV_UP): eth0: link is not ready的解决方法

    一.背景 2018年5月24日,笔者的pc已经连续运转两天了,突然要使用有线网卡,却发现有线网卡无法正常工作,于是查看了一下内核日志: r8169 0000:05:00.0 eth0: link do ...

  6. linux下通过命令行上传文件到百度网盘

    一.环境: centos release 6.9 python 2.7.13 二.安装工具bypy sudo pip install bypy 三.使用bypy 3.1 授权 [root@ineedl ...

  7. spark监控入门

    前言 Spark作为计算引擎每天承载了大量的计算任务,为了监控集群的资源使用情况,对spark的监控也在所难免,Spark的监控有3个入口,1. Rest; 2.另一个是Metrics; 3. Log ...

  8. ClickOnce部署winform

    1.完成winform程序. 示例: 2.项目->属性->发布. 有关ftp在iis中的配置,请参考:IIS中添加ftp站点 :url也需在iis中配置.flashfxp中显示ftp成功 ...

  9. NOI 08 石头剪刀布

    石头剪刀布(NOI 08) 总时间限制: 1000ms 内存限制: 65536kB 描述 石头剪刀布是常见的猜拳游戏.石头胜剪刀,剪刀胜布,布胜石头.如果两个人出拳一样,则不分胜负. 一天,小A和小B ...

  10. FAILED Selenium2Library

    FAILED Selenium2Library Importing test library 'Selenium2Library' failed: ImportError: cannot import ...