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