oc58--Category注意事项

简介:
复制代码
//
//  main.m
//  Category注意事项

#import <Foundation/Foundation.h>
#import "Person+NJ.h"

int main(int argc, const char * argv[]) {

    Person *p = [Person new];
//    p.height = 1.75;
    [p say];
    
    return 0;
}
复制代码
复制代码
//
//  Person.h

#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+MJ.h

#import "Person.h"

@interface Person (MJ)
@end
复制代码
复制代码
//
//  Person+MJ.m

#import "Person+MJ.h"

@implementation Person (MJ)

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

#import "Person.h"

// 1.分类是用于给原有类添加方法的, 它只能添加方法, 不能添加属性(成员变量)
@interface Person (NJ)
//{
//    double _height;
//}
// 2.分类中的@property, 只会生成setter/getter方法的声明, 不会生成实现以及私有的成员变量,所以下面写的不会报错,但是也不能添加属性。
//@property (nonatomic, assign) double height;


- (void) hello;

/*
 方法的调用顺序:
 1.分类
 2.本类
 3.父类
 */
@end
复制代码
复制代码
//  Person+NJ.m

#import "Person+NJ.h"

@implementation Person (NJ)

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

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

 



本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/7436161.html,如需转载请自行联系原作者
相关文章
|
5月前
|
Java Maven C++
【Azure Developer】记录一次使用Java Azure Key Vault Secret示例代码生成的Jar包,单独运行出现 no main manifest attribute, in target/demo-1.0-SNAPSHOT.jar 错误消息
【Azure Developer】记录一次使用Java Azure Key Vault Secret示例代码生成的Jar包,单独运行出现 no main manifest attribute, in target/demo-1.0-SNAPSHOT.jar 错误消息
103 0
|
存储
OC:关于Category、load、initialize的那些事你还记得吗?
这篇文章主要分析Category的实现原理,load方法和initialize方法调用方式、调用时机、调用顺序、以及他们的区别,解释 Catgory 与 class Extension 有什么区别。
170 0
|
Java
会员卡模板创建(alipay.marketing.card.template.create)JAVA版本demo
先附上官方接口文档地址:[url]https://docs.open.alipay.com/api_5/alipay.marketing.card.template.create[/url]  话不多说,我这里先将测试通过的核心代码贴上  //创建卡模板 public static vo...
989 12
|
Java
会员卡更新(alipay.marketing.card.update)JAVA版本demo
说明:       该接口用于会员卡更新信息,官方接口文档【会员卡更新】       开卡接口参考该贴:[url]https://openclub.alipay.com/read.php?tid=1628&fid=71[/url] 代码调用示例:  public static void card...
573 12
|
Java
修改广告接口(alipay.marketing.cdp.advertise.modify)JAVA版本demo
说明:         该接口是开发者帮助线下商家修改广告内容,如修改的是线上的广告内容,需要先将线上广告内容下架,再修改,修改后操作上架,才能在支付宝钱包APP看到修改后的广告内容。运营位类型可以选择图片或H5。
409 12
|
Java
会员卡模板修改接口(alipay.marketing.card.template.modify)JAVA版本demo
说明:    该接口主要用于创建之后的会员卡的模板修改,官方接口文档请点击【会员卡模板修改】    创建模板接口请参考我的这个帖子:[url]https://openclub.alipay.com/read.
676 0
|
Java
会员卡删卡(alipay.marketing.card.delete)JAVA版本demo
说明:          该接口是通过API接口进行删除会员卡的操作流程,官方接口文档【会员卡删卡】          开卡接口请参考该贴:[url]https://openclub.alipay.com/read.
601 0