OC语言day06-09分类注意事项

2016-06-19  本文已影响38人  liyuhong165

pragma mark 分类注意事项

pragma mark 概念

/**
 // 1.分类是用于给原有类的方法的,他只能添加方法,不能添加属性(成员变量)
 // 2.分类中的@property,只会生成setter/getter方法的声明,不会生成实现以及私有的所有变量,
 // 2.1 分类可以访问原来类中的成员变量
 // 3. 注意:如果分类中和原有类同名的方法,会调用 分类的方法 \
 // 3.1如果多个分类中有同名的方法,会执行最后一个编译分类的方法
 // 也就是说 会忽略原有类的方法  \
 // 注意: 在开发中尽量不要这样写 \
 
 方法的调用顺序:
 1.分类
 2.本类
 3.父类
 
 
 
 */

pragma mark 代码

#import <Foundation/Foundation.h>
#pragma mark 类
#import "Person.h"
#pragma mark main函数
int main(int argc, const char * argv[])
{
    
    Person *p = [Person new];
//    p.height = 1.70;
    [p say];
    
    return 0;
}


#####Person.h //人类
```objc
#import <Foundation/Foundation.h>

@interface Person : NSObject
{
    double _weight;
}
@property (nonatomic,assign)int age;

- (void)say;
@end
Person.m

#import "Person.h"

@implementation Person

- (void)say
{
    NSLog(@"age = %i",_age);
}
@end

Person+LYH.h //分类(LYH)
#import "Person.h"

// 1.分类是用于给原有类的方法的,他只能添加方法,不能添加属性(成员变量)
@interface Person (LYH)

// 2.分类中的@property,只会生成setter/getter方法的声明,不会生成实现以及私有的所有变量,
//@property (nonatomic,assign) double height;

//- (void)hello;



#warning 分类的扩充方法声明
- (void)hello;

- (void)say;
@end
Person+LYH.m
#import "Person+LYH.h"

@implementation Person (LYH)
// 实现扩充方法
- (void)playFootball
{
    NSLog(@"%s",__func__);
}

- (void)playBasketBall
{
    NSLog(@"%s",__func__);
}

#warning 分类的扩充方法实现
- (void)hello
{
    // 可以在分类中访问 原有类 中.h的属性
    NSLog(@"hello %f",_weight);
}

#warning  注意:如果分类中和原有类同名的方法,会调用 分类的方法
// 也就是说 会忽略原有类的方法
// 注意: 在开发中浸凉不要这样写
- (void)say
{
    NSLog(@"%s",__func__);
}
@end

Person+YHS.h //分类
#import "Person.h"

@interface Person (LYS)

- (void)say;

@end

Person+YHS.m
#import "Person+LYS.h"

@implementation Person (LYS)

// 如果多个分类中都有和原有类中同名的方法, 那么就调用该方法的时候执行谁 由编译器决定
// 会执行最后一个参与编译的分类中的方法

- (void)say
{
    NSLog(@"%s",__func__);
}
@end


上一篇 下一篇

猜你喜欢

热点阅读