OC 复合
在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 复合的更多相关文章
- OC 复合 组装电脑
键盘类 #import <Foundation/Foundation.h> @interface Keyboard : NSObject @property(strong,nonatomi ...
- OC 类簇与复合
OC 类簇与复合 类簇: 类簇是Foundation框架中广泛使用的设计模式.类簇将一些私有的.具体的子类组合在一个公共的.抽象的超类下面,以这种方法来组织类可以简化一个面向对象框架的公开架构,而又不 ...
- 【《Objective-C基础教程 》笔记ch05】(六)OC中的复合机制Composition
1.复合通过包括作为实例变量的的对象指针实现的. @interface Unicycle : NSObject { Pedal*pedal; ...
- OC中的复合
#import <Foundation/Foundation.h> #import "Car.h" int main(int argc, const char * ar ...
- oc必须知道的知识点
id数据类型 1.通用的指针类型 2.没有*号 3.使用id类型时,不能给对象的属性或成员变量进行赋值 4.可以对其发送任何(存在的)消息 import与@class的区别 1.import会包含 ...
- iOS - OC 面向对象语法
1.类 1)根类:因为类 NSObject 是层次结构的最顶层,因此称为根类. 可以将类称为子类(subclass)和父类(superclass),也可以将类称为子类和超类. 2)分类/类别(cate ...
- Swift基本语法以及与OC的比较
一.注释: 1.单行注释和OC一致. 2.块注释中有与OC不同点:可以嵌套注释 二.常量和变量: 1.常量:初始化后可读不可写 let 2.变量:初始化后可读可写 var //不需要指定类型,系统会自 ...
- OC基础-第1天
#pragma mark - Day01_01_OC语言的历史(了解) 1) Objective - C 是一门面向对象的高级语言 2) Objective - C 简称 obj - C \ OC ...
- oc总结
OC10天大纲 一.类和对象 1.什么是类? 同一种对象的抽象就是类. 2.什么是对象? 世界上的任何事物都可以称为对象,每个对象都有他自己的属性和行为. 3.如何创建一个类(请把一个.h和一个.m粘 ...
随机推荐
- 解决Vue循环中子组件不实时更新的问题
问题描述 使用Element-UI中的table组件时会遇到一个常见的问题.当在el-table中调用子组件的时候会出现数据更新后,子组件没有重新渲染的问题. eg:资源列表中的健康度组件. 代码如下 ...
- U盘+GRUB2引导PE或linux镜像
利用U盘制作启动盘,引导WinPE.Linux安装的文章多如牛毛,与他们相比本文的特点有: 1.用且仅用grbu2做引导.不使用grub4dos,不是使用msdos mbr转到活动分区,到ntldr, ...
- uboot下的命令使用示例
1.usb 可以使用此命令读取u盘里的内容,此命令加上相关参数可以有以下功能: 1.1usb start 在使用u盘之前必须启动此命令以初始化好fat文件系统环境,笔者的输出如下: jello # u ...
- 【附4】springboot源码解析-run()
public ConfigurableApplicationContext run(String... args) { StopWatch stopWatch = new StopWatch(); / ...
- BZOJ5142: [Usaco2017 Dec]Haybale Feast 线段树或二分答案
Description Farmer John is preparing a delicious meal for his cows! In his barn, he has NN haybales ...
- SPA (单页应用程序)
单页Web应用 编辑 单页Web应用(single page web application,SPA),就是只有一张Web页面的应用.单页应用程序 (SPA) 是加载单个HTML 页面并在用户与应用程 ...
- js函数事件对象
每个函数都有4个默认对象 arguments 保存着实际传入的参数,集合列表 return 有两个功能,打断函数和返回函数值 this 谁调用的函数,this就是谁 event 事件对象 事件 box ...
- IL and 堆于栈
CIL的基本构成+CIL操作码速记表+CIL操作码大全速查 引用类型:引用类型存储在堆中.类型实例化的时候,会在堆中开辟一部分空间存储类的实例.类对象的引用还是存储在栈中. 值类型:值类型总是分配在它 ...
- 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 ...
- Goroutines和Channels(二)
网络编程是并发大显身手的一个领域,由于服务器是最典型的需要同时处理很多连接的程序,这些连接一般来自于彼此独立的客户端. 本小节,我们会讲解go语言的net包,这个包提供编写一个网络客户端或者服务器程序 ...