在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. ssh连接linux服务器不断开- "Write failed: Broken pipe"

    我自己用阿里云的服务器的时候,发现ssh连上以后,一会不用就断掉了,非常不方便,服务端的系统是ubuntu. 查了些东西,原来可以去配置服务端的sshd,或者客户端的ssh,就行了. 1,配置服务器端 ...

  2. PHP_SELF变量解析和重复路径解决

    最近升级PHP到PHP7版本,并重新部署了新的Nginx,启动的时候发现了一个问题,全局变量$_SERVER['PHP_SELF']的值发生了改变,从而影响到代码的功能.因此我们来了解下$_SERVE ...

  3. 20145127《java程序设计》第三次实验

    实验三 敏捷开发与XP实践 一.实验内容及其步骤 1.配置开源中国公钥 2.找到ssh公钥 3.在开源中国添加公钥 4.下载同组同学项目 5.推送代码到开源中国 6.推送代码成功 二.实验感想总结: ...

  4. 【前端】javascript+jQuery实现旋转木马效果轮播图slider

    实现效果: 实现原理: 技术栈: javascript+jQuery+html+css 实现步骤: // 0. 获取元素 // 1. 鼠标放置到轮播图上,显示两侧的控制按钮,移开后隐藏 // 2. 为 ...

  5. Python3基础 if嵌套示例

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

  6. RSA加密解密中pkcs1与pkcs8格式私钥互相转换

    net,ios中rsa加解密使用的是pkcs1,而java使用的是pkcs8 如果是按1024取模(通常都是1024),pkcs1格式的私钥长度应该是812.如果是pkcs8的格式的密钥长度为861. ...

  7. ACM-ICPC 2018 徐州赛区网络预赛H Ryuji doesn't want to study(树状数组)题解

    题意:给你数组a,有两个操作 1 l r,计算l到r的答案:a[l]×L+a[l+1]×(L−1)+⋯+a[r−1]×2+a[r] (L is the length of [ l, r ] that ...

  8. POJ 2449 Remmarguts' Date(第K短路 + A* + 最短路)题解

    题意:找出第k短路,输出长度,没有输出-1 思路:这题可以用A*做.A*的原理是这样,我们用一个函数:f = g + h 来表示当前点的预期步数,f代表当前点的预期步数,g代表从起点走到当前的步数,h ...

  9. IDEA,RubyMine等JetBrains系列软件通用破解教程

    此教程不光适用于IDEA,还可以在RubyMine等JetBrains系列软件使用,亲测可用. (1)下载安装你需要的JetBrains系列软件,安装完最好不要打开,直接finish,断开网络. (2 ...

  10. 【深度学习】Pytorch 学习笔记

    目录 Pytorch Leture 05: Linear Rregression in the Pytorch Way Logistic Regression 逻辑回归 - 二分类 Lecture07 ...