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,如需转载请自行联系原作者
相关文章
|
API 数据库 数据安全/隐私保护
利用Django框架构建高效后端API服务
本文将介绍如何利用Django框架构建高效的后端API服务。通过深入分析Django框架的特性和优势,结合实际案例,探讨了如何利用Django提供的强大功能来构建高性能、可扩展的后端服务。同时,还对Django框架在后端开发中的一些常见问题进行了解决方案的探讨,并提出了一些建设性的建议。
344 3
|
算法 安全
【操作系统】死锁处理-银行家算法
【操作系统】死锁处理-银行家算法
420 0
|
3月前
|
机器学习/深度学习 人工智能 分布式计算
Post-Training on PAI (1):一文览尽开源强化学习框架在PAI平台的应用
Post-Training(即模型后训练)作为大模型落地的重要一环,能显著优化模型性能,适配特定领域需求。相比于 Pre-Training(即模型预训练),Post-Training 阶段对计算资源和数据资源需求更小,更易迭代,因此备受推崇。近期,我们将体系化地分享基于阿里云人工智能平台 PAI 在强化学习、模型蒸馏、数据预处理、SFT等方向的技术实践,旨在清晰地展现 PAI 在 Post-Training 各个环节的产品能力和使用方法,欢迎大家随时交流探讨。
|
前端开发 JavaScript 数据可视化
Echarts 折线图完全配置指南 - 手把手教你设置 Echarts 折线图详细教程
Echarts 折线图是图表中最常用的显示形式之一。使用 Echarts 做出基本的折线图很简单,但要是想把多组数据放在一张图表中,展示的漂亮又直观就不容易了。本文将带领大家从最基本的折线图,一步步完善,最终做出可读性很高的可视化图表。 根据本教程在卡拉云中搭建的折线图 Demo,你可以立即注册卡拉云,跟随本教程学习 跟随本教程你将学到 1.折线外观属性 折线增加弧线平滑过渡 折线图变为散状圆点 实线改为虚线 折线指定颜色 增加数据显示 表格外观属...
1608 0
|
JavaScript
Vue3列表(List)
这段代码介绍了一个基于 Vue3 的列表组件库 `Vue Amazing UI`。该库提供了丰富的自定义选项,如边框、垂直布局、分割线、尺寸、加载状态等,并支持分页、自定义样式及操作项。组件通过插槽和属性实现高度灵活的内容展示与交互。
284 1
Vue3列表(List)
字符编码问题之GB2312编码扩充到包括更多汉字和生僻字的如何解决
字符编码问题之GB2312编码扩充到包括更多汉字和生僻字的如何解决
260 0
|
机器学习/深度学习 算法 计算机视觉
基于多注意力融合的抗遮挡目标跟踪算法综述
基于多注意力融合的抗遮挡目标跟踪算法综述
810 0
基于多注意力融合的抗遮挡目标跟踪算法综述
|
前端开发 JavaScript
ajax Fileupload多文件上传实现案例
ajax Fileupload多文件上传实现案例
253 1
|
机器学习/深度学习 搜索推荐 UED
推荐系统专题 | MiNet:跨域CTR预测
推荐系统专题 | MiNet:跨域CTR预测
558 0
推荐系统专题 | MiNet:跨域CTR预测
|
Ubuntu Linux 网络安全
SSH 远程登录报错:Permission denied, please try again. 解决办法
SSH 远程登录报错:Permission denied, please try again. 解决办法
4808 0