您的位置:首页 > 移动开发 > Objective-C

Objective-C(3)对象间的has a关系---复合关系

2016-02-27 16:19 330 查看
什么是复合关系?

类的复合关系是类的关系中最常见的一种。
复合是 has a 的关系,如Person类中包含一个成员属性,Book对象,Person has a Book。

复合关系的实现

OC中要求,所有对象都以指针的形式引用,所以这种关系应体现为:
Person类的对象中包含一个Book对象的地址。



图上所示,包含了三个对象:
Person对象(由new方法创建而来)
NSString对象(字符串对象的字面值@"张三"赋值)

Book对象 (由new方法创建而来)

复合关系的内存情况




显然,p指针一定是函数或者方法中的局部变量,其内存使用的是栈控件
Objective-C中的所有对象一定是在堆中的,故三个对象Person、NSString、Book的内存都是堆空间的
Person、NSString、Book的内存空间并不是连续或互相包含的
Person has a NSString 表现为 Person对象中有NSString对象的地址

Person has a Book 表现为Person对象中有Book对象的地址

循环引用问题

如果出现两个类中属性互相复合时,头文件互相包含会出现循环引用的情况
在头文件中使用@class是声明被复合的类,在源文件再包含该类的头文件即可解决这个问题
//AMPerson.h
@class AMBook;
@interface AMPerson : NSObject
{
AMBook * book;
}
@end
//AMPerson.m
#import "AMBook.h"
@implementation AMPerson
//...
@end
//AMBook.h
@class AMPerson;
@interface AMBook : NSObject
{
AMPerson * person;
}
@end
//AMBook.h
#import "AMPerson.h"
@implementation AMBook
//...
@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  iOS 对象