Category注意事项
1.分类的使用注意事项
- 分类只能增加方法, 不能增加成员变量
@interface Person (NJ)
{
// 错误写法
// int _age;
}
- (void)eat;
@end
- 分类中写property只会生成方法声明
@interface Person (NJ)
// 只会生成getter/setter方法的声明, 不会生成实现和私有成员变量
@property (nonatomic, assign) int age;
@end
- 分类可以访问原来类中.h中的成员变量
@interface Person : NSObject
{
int _no;
}
@end @implementation Person (NJ)
- (void)say
{
NSLog(@"%s", __func__);
// 可以访问原有类中得成员变量
NSLog(@"no = %i", _no);
}
@end
- 如果分类和原来类出现同名的方法, 优先调用分类中的方法, 原来类中的方法会被忽略
@implementation Person - (void)sleep
{
NSLog(@"%s", __func__);
}
@end @implementation Person (NJ)
- (void)sleep
{
NSLog(@"%s", __func__);
}
@end int main(int argc, const char * argv[]) {
Person *p = [[Person alloc] init];
[p sleep];
return 0;
} 输出结果:
-[Person(NJ) sleep]
2.分类的编译的顺序
- 多个分类中有同名方法,则执行最后编译的文件方法(注意开发中千万不要这么干)
@implementation Person - (void)sleep
{
NSLog(@"%s", __func__);
}
@end @implementation Person (NJ)
- (void)sleep
{
NSLog(@"%s", __func__);
}
@end @implementation Person (MJ)
- (void)sleep
{
NSLog(@"%s", __func__);
}
@end int main(int argc, const char * argv[]) {
Person *p = [[Person alloc] init];
[p sleep];
return 0;
} 输出结果:
-[Person(MJ) sleep]

方法调用的优先级(从高到低)
- 分类(最后参与编译的分类优先)
- 原来类
- 父类
Category注意事项的更多相关文章
- oc58--Category注意事项
// // main.m // Category注意事项 #import <Foundation/Foundation.h> #import "Person+NJ.h" ...
- OC基础(18)
Category基本概念 Category注意事项 *:first-child { margin-top: 0 !important; } body > *:last-child { margi ...
- OC基础笔记目录
OC基础(1) Objective-C简介 OC和C对比 第一个OC程序 面向对象思想 OC基础(2) 类与对象 类的设计 第一个OC类 对象方法的声明和实现 类方法的声明和实现 OC基础(3) 对象 ...
- 2020年iOS进阶面试题总结(一)
准备找工作的你,可以看看,复习复习!! 1.说一下OC的反射机制 在动态运行下我们可以构建任何一个类,然后我们通过这个类知道这个类的所有的属性和方法,并且如果我们创建一个对象,我们也可以通过对象找到这 ...
- OC-ARC,类扩展,block
总结 标号 主题 内容 一 autorelease autorelease基本概念/自动释放池/autorelease基本使用 二 autorelease注意事项 注意点/应用场景 三 ARC 什么是 ...
- Masonry使用注意事项
1 理解自身内容尺寸约束与抗压抗拉 自身内容尺寸约束:一般来说,要确定一个视图的精确位置,至少需要4个布局约束(以确定水平位置x.垂直位置y.宽度w和高度h).但是,某些用来展现内容的用户控件,例如文 ...
- Qt编写自定义控件插件路过的坑及注意事项
在一日一控件的口号下,终于写好了五十几个自定义控件,包括各种仪表盘,各种温度计,各种进度条,各种按钮等,具体可参见(http://www.cnblogs.com/feiyangqingyun/p/61 ...
- 关于IntentFilter的几点注意事项:
http://blog.csdn.net/cnnumen/article/details/8464786 IntentFilter就是用于描述intent的各种属性, 比如action, catego ...
- Objective-C :Category
Category 引入 在日常的开发中,可能会碰到这样的需求:给某个类增加方法.比如说,需要给NSString类增加一个打印的方法.当然,我们可以新建一个类比如TestString,并继承NSStri ...
随机推荐
- Eclipse中英文对照表(整理笔记)
Eclipse百度界面中英文对照 目录 Eclipse百度界面中英文对照 0.菜单栏 1.File 文件菜单 2.Edit 编辑菜单 3.Source 源代码 4.Refactor 重构 5.Navi ...
- RabbitMQ基础教程系列
Ubuntu16.04下,erlang安装和rabbitmq安装步骤 Ubuntu16.04下,rabbimq集群搭建 C# .net 环境下使用rabbitmq消息队列 .net core使用rab ...
- Fiddler Everywhere简单使用
重装了电脑,想装Fiddler,结果官网下载的包变成了Fiddler Everywhere,体验了下,与老版本相比,操作流程上并无太大变化,但是安装包明显变大了,而且需要登录才能操作,建议还是用老版本 ...
- 关于Mysql的Qcache优化
query_cache_size = 64M 指定MySQL查询缓冲区的大小.可以通过在MySQL控制台执行以下命令观察:# > SHOW VARIABLES LIKE '%query_cach ...
- Spring cloud 框架 --- Eureka 心得
spring boot 1.5.9.RELEASE spring cloud Dalston.SR1 1.前言 (1)接触了spring cloud 框架 ,首先要知道Eureka是什 ...
- maven仓库策略
当构建Maven项目时,首先检查pom.xml文件以确定依赖包的下载位置,执行顺序如下: 1.从本地资源库中查找并获得依赖包,如果没有,执行第2步. 2.从Maven默认中央仓库中查找并获得依赖包(h ...
- 深入理解MySQL索引底层数据结构
作者:IT王小二 博客:https://itwxe.com MySQL 索引相关的数据结构有两种,一种是 B+tree,一种是 Hash,那么为什么在 99.99% 的情况下都使用的是 B+tree索 ...
- RabbitMQ除开RPC的五种消模型----原生API
2.五种消息模型 RabbitMQ提供了6种消息模型,但是第6种其实是RPC,并不是MQ,因此不予学习.那么也就剩下5种. 但是其实3.4.5这三种都属于订阅模型,只不过进行路由的方式不同. 通过一个 ...
- Selenium2+python自动化65-js定位几种方法总结
Selenium2+python自动化65-js定位几种方法总结 前言 本篇总结了几种js常用的定位元素方法,并用js点击按钮,对input输入框输入文本 一.以下总结了5种js定位的方法 除了i ...
- 【一个idea】YesSql,一种在经典nosql数据库redis上实现SQL引擎的方案(我就要开历史的倒车)
公众号链接 最高级的红酒,一定要掺上雪碧才好喝. 基于这样的品味,我设计出了一套在经典nosql数据库redis上实现SQL引擎的方法.既然redis号称nosql,而我偏要把SQL加到redis上, ...