黑马程序员-------OC----关联关系和依赖关系

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-


关联关系

在实例化A类的时候,需要B类作为构造方法的参数,这说明A类需要持有一个B类的引用。
这种持有引用,就是简单的关联关系。在代码中表现为:在A类中有一个成员变量,变量的类型是B类,A类中持有了B类的引用,就说明A类和B类发生了关联关系。

先定义两个类:

Dog类的声明

#import <Foundation/Foundation.h>

@interface Dog : NSObject
@property NSString *name;
@end

Dog类的实现


#import "Dog.h"

@implementation Dog

@end

Person类的声明:

#import <Foundation/Foundation.h>
#import "Dog.h"
@interface Person : NSObject
{
    @public
    NSString *name;
    Dog *dog;
}
-(void)print;
@end

Person类的实现

#import "Person.h"

@implementation Person
-(void)print{
    NSLog(@"%@有一只狗:名字是%@",name,dog.name);
}
@end

在main函数中:

#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
    Person *p = [[Person alloc] init];
    p->name = @"小明";
    Dog *d = [[Dog alloc] init];
    d.name = @"大黄";
    p->dog = d;
    [p print];
    }
    return 0;
}

这里人的类中有一个狗类型的成员变量,他们就发生了关联关系

依赖关系

A类的某个方法使用B类,可能是方法的参数是B类,也可能是在方法中获得了一个B类实例。但无论是哪种情况,B类在A类中都是以局部变量的形式存在的。
因此,A类中有B类型的局部变量,就说A类依赖于B类。

这里给Person类加一个方法:

@interface Person : NSObject
{
    @public
    NSString *name;
    Dog *dog;
}
-(void)print;
-(void)have_a_dog:(Dog*)d;  //加一个方法
@end

该方法的实现:

@implementation Person
-(void)print{
    NSLog(@"%@有一只狗:名字是%@",name,dog.name);
}
-(void)have_a_dog:(Dog *)d{

    NSLog(@"%@有一只狗:名字叫做%@",name,d.name);
}
@end

在main函数中:

#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
    Person *p = [[Person alloc] init];
    p->name = @"小明";
    Dog *d = [[Dog alloc] init];
    d.name = @"大黄";
    //p->dog = d;
    //[p print];
    [p have_a_dog:d];
    }
    return 0;
}

可以看到,Dog类的一个实例变量作为的Person类对象方法的参数,所以他们是依赖关系

综上,有一个简单的判断原则:某个类以成员变量的形式出现在另一个类中,二者是关联关系;某个类以局部变量的形式出现在另一个类中,二者是依赖关系。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值