美文网首页八天学会OC
第06天OC语言(09):分类注意事项

第06天OC语言(09):分类注意事项

作者: liyuhong | 来源:发表于2017-07-22 08:58 被阅读8次
  • 不要等到明天,明天太遥远,今天就行动。
须读:看完该文章你能做什么?

1.知道 方法的调用顺序
2.知道 多个分类的一些注意事项(同名方法中 系统是怎么调用的)

学习前:你必须会什么?(在这里我已经默认你具备C语言的基础了)

什么是分类

分类是用于给原有类添加方法的,只能添加方法,不能添加属性(成员变量)

一、本章笔记
 一、分类的注意点
     1.分类是用于给原有类添加方法的,只能添加方法,不能添加属性(成员变量)
     2.分类中的 @property, 只会生成 setter / getter方法的声明,不会生成实现 以及 私有的成员变量
     3.可以在分类中 访问原有类中 .h 的属性
     4.如果多个分类中 都有原有类中 同名的方法, 那么调用该方法的时候执行谁 由编译器决定
        会执行 最后一个 参与编译的分类中的方法
 
     注意 : 如果分类中 有 和 原有类同名的方法,会调用分类中的方法
     也就是说会忽略原有类的方法
     注意 : 在开发中 尽量不要这样写
 二、方法的调用顺序:
     1.分类
     2.本类
     3.父类

二、code
main.m
#pragma mark 09-分类注意事项.mp4
#pragma mark 概念
/*
 一、分类的注意点
     1.分类是用于给原有类添加方法的,只能添加方法,不能添加属性(成员变量)
     2.分类中的 @property, 只会生成 setter / getter方法的声明,不会生成实现 以及 私有的成员变量
     3.可以在分类中 访问原有类中 .h 的属性
     4.如果多个分类中 都有原有类中 同名的方法, 那么调用该方法的时候执行谁 由编译器决定
        会执行 最后一个 参与编译的分类中的方法
 
     注意 : 如果分类中 有 和 原有类同名的方法,会调用分类中的方法
     也就是说会忽略原有类的方法
     注意 : 在开发中 尽量不要这样写
 二、方法的调用顺序:
     1.分类
     2.本类
     3.父类
 */
#pragma mark - 代码
#import <Foundation/Foundation.h>
#pragma mark 类
#import "Person+LYH.h"
#pragma mark - main函数
int main(int argc, const char * argv[])
{
    
    Person *p = [[Person alloc]init];
//    p.height = 1.77; // '-[Person setHeight:]: unrecognized selector sent to instance 0x100501380'
    [p say];
    
    return 0;
}

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

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

- (void)say;

@end

>>>.m
#import "Person.h"

@implementation Person

@end

Person+LYH
>>>.h
#import "Person.h"

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

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

- (void)hello;

@end

>>>.m
#import "Person+LYH.h"

@implementation Person (LYH)

- (void)hello
{
    // 3.可以在分类中 访问原有类中 .h 的属性
    NSLog(@"hello %f",_weight);
}

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

Person+LYS
>>>.h
#import "Person.h"

@interface Person (LYS)

@end

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

@implementation Person (LYS)


// 如果多个分类中 都有原有类中 同名的方法, 那么调用该方法的时候执行谁 由编译器决定
// 会执行 最后一个 参与编译的分类中的方法
- (void)say
{
     NSLog(@"%s",__func__);
}
@end

相关文章

网友评论

    本文标题:第06天OC语言(09):分类注意事项

    本文链接:https://www.haomeiwen.com/subject/suuahxtx.html