在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. 解决Vue循环中子组件不实时更新的问题

    问题描述 使用Element-UI中的table组件时会遇到一个常见的问题.当在el-table中调用子组件的时候会出现数据更新后,子组件没有重新渲染的问题. eg:资源列表中的健康度组件. 代码如下 ...

  2. U盘+GRUB2引导PE或linux镜像

    利用U盘制作启动盘,引导WinPE.Linux安装的文章多如牛毛,与他们相比本文的特点有: 1.用且仅用grbu2做引导.不使用grub4dos,不是使用msdos mbr转到活动分区,到ntldr, ...

  3. uboot下的命令使用示例

    1.usb 可以使用此命令读取u盘里的内容,此命令加上相关参数可以有以下功能: 1.1usb start 在使用u盘之前必须启动此命令以初始化好fat文件系统环境,笔者的输出如下: jello # u ...

  4. 【附4】springboot源码解析-run()

    public ConfigurableApplicationContext run(String... args) { StopWatch stopWatch = new StopWatch(); / ...

  5. BZOJ5142: [Usaco2017 Dec]Haybale Feast 线段树或二分答案

    Description Farmer John is preparing a delicious meal for his cows! In his barn, he has NN haybales ...

  6. SPA (单页应用程序)

    单页Web应用 编辑 单页Web应用(single page web application,SPA),就是只有一张Web页面的应用.单页应用程序 (SPA) 是加载单个HTML 页面并在用户与应用程 ...

  7. js函数事件对象

    每个函数都有4个默认对象 arguments 保存着实际传入的参数,集合列表 return 有两个功能,打断函数和返回函数值 this 谁调用的函数,this就是谁 event 事件对象 事件 box ...

  8. IL and 堆于栈

    CIL的基本构成+CIL操作码速记表+CIL操作码大全速查 引用类型:引用类型存储在堆中.类型实例化的时候,会在堆中开辟一部分空间存储类的实例.类对象的引用还是存储在栈中. 值类型:值类型总是分配在它 ...

  9. poj 2762 Going from u to v or from v to u? trajan+拓扑

    Going from u to v or from v to u?   Description In order to make their sons brave, Jiajia and Wind t ...

  10. Goroutines和Channels(二)

    网络编程是并发大显身手的一个领域,由于服务器是最典型的需要同时处理很多连接的程序,这些连接一般来自于彼此独立的客户端. 本小节,我们会讲解go语言的net包,这个包提供编写一个网络客户端或者服务器程序 ...