oc-13-多文件

Dog.h
#import <Foundation/Foundation.h>

@interface Dog : NSObject
{
@public
    NSString *_name;
    int _color;
    int _speed;
    int _sex;
    float _weight;
    
}

- (void)eat;
- (void)bark;
- (void)run;
- (BOOL)cmpColor:(Dog *)otherDog;
- (int)cmpSpeed:(Dog *)otherDog;
@end
Dog.m
#import "Dog.h"

@implementation Dog
- (void)eat{
    _weight +=0.5;
    NSLog(@" %@ 在吃 shi  吃完之后 体重为 %.2f",_name,_weight);
    
}

- (void)bark{
    NSLog(@" 汪  name = %@  ,颜色= %d ,速度 =%d , 体重 %.2f  性别 %d" ,_name,_color,_speed,_weight,_sex);
}

- (void)run{
    _weight -=0.5;
    NSLog(@" ssss ss  %@ ",_name);
    NSLog(@"speed = %d , 体重= %.2f",_speed,_weight);
}

- (BOOL)cmpColor:(Dog *)otherDog{
    if (_color == otherDog->_color) {
        return YES ;
    }else{
        return NO;
    }
}

- (int)cmpSpeed:(Dog *)otherDog{
    
    return _speed - otherDog->_speed;
}
@end
Person.h
#import <Foundation/Foundation.h>

#import "Dog.h"

@interface Person : NSObject
{
@public
    NSString *_name;//名字属性
    Dog * _dog;// 狗属性
}

- (void)feedDogWith:(NSString *)foodName;
- (void)walkDog;
@end
Person.m
#import "Person.h"

@implementation Person

- (void)feedDogWith:(NSString *)foodName{
    NSLog(@" %@ 在喂狗吃 %@ ",_name,foodName);
    [_dog eat];
}
//遛狗:每溜一次,狗就会执行“跑”这个行为
- (void)walkDog{
    NSLog(@" %@ 在遛狗 ",_name);
     NSLog(@" _dog ===%p ",_dog);
    [_dog run];
    
}
@end
main.m
#import <Foundation/Foundation.h>
//#import "Dog.h"
#import "Person.h"
/*
  多文件步骤 
   1. 把声明 放在 .h文件里面    把实现放在.m文件里面   文件名是类名
   2. 目的 提高程序的可读性.
 */

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        Person *zhangsan = [Person new];
        zhangsan->_name = @"张三";
      
        Dog *wangcai = [Dog new];
        wangcai->_name = @"旺财";
        wangcai->_sex = 1;
        wangcai->_speed = 90;
        wangcai->_weight = 500;
        wangcai->_color = 5 ;
        
        NSLog(@"wangcaiiiiiii ---> %p",wangcai);
        [wangcai bark];
        zhangsan->_dog =wangcai;
        [zhangsan walkDog];
        
    }
    return 0;
}

 栈区是变量名是对象地址,堆区是对象内存,调用方法的时候是根据方法的地址找的方法。
/**
 对象和对象之间的关系
 1.组合关系
 1台计算机对象由:硬盘对象,内存对象,CPU对象,主板对象,显示器对象等等.
 汽车和轮胎 -- 组合关系 
 体现:整体---局部
 
 2.依赖关系
 女孩用手机打电话,是女孩依赖手机.
 1个对象作为另外1个对象的方法的参数.
 
 3.关联关系
 1个对象作为另外1个对象的成员变量,他们之间不是组合关系.也就是不是整体和部分的关系.
 
 总结:组合关系和关联关系,用法是一样:1个对象作为另外1个对象的成员变量.
     组合:整体---局部
     关联:不存在必然的关系.
     依赖:1个对象作为另外1个对象的方法参数.
 */
原文地址:https://www.cnblogs.com/yaowen/p/5308246.html