ios 分类

 1 //
 2 //  main.m
 3 //  分类
 4 //
 5
 6 /*
 7  分类:Category (类目,类别)(OC特有)
 8  命名:Person+EE  (Person+ 自动生成,只要写后面的,一般以模块名为名)
 9  分类的作用:在不改变原来类的内容的情况下,可以给我们的类添加一些方法
10  注意:
11  1>分类只能增加方法,不能增加成员变量
12  2>分类方法的实现中可以访问原来类中的成员变量
13  3>分类可以重写原来类中的方法,但是会覆盖掉原来类的方法(一般不会再分类当中重写原来类的方法)
14  4>调用优先级:分类优先(最后参与编译的分类会优先调用)
15  */
16
17 #import <Foundation/Foundation.h>
18 #import "Person.h"
19 #import "Person+EE.h"
20 #import "Person+BB.h"
21 int main(int argc, const char * argv[]) {
22     Person *p = [[Person alloc]init];
23     p.age = 10;
24     [p test];
25 //    [p run];
26     return 0;
27 }

main.m

 1 //
 2 //  Person.h
 3 //  分类
 4 //
 5
 6 #import <Foundation/Foundation.h>
 7
 8 @interface Person : NSObject
 9 {
10     int _age;
11
12 }
13 @property int age;
14 - (void)test;
15 @end

Person.h

 1 //
 2 //  Person.m
 3 //  分类
 4 //
 5
 6 #import "Person.h"
 7
 8 @implementation Person
 9
10 - (void)test{
11
12     NSLog(@"调用Person-test方法");
13
14 }
15 @end

Person.m

创建分类

 1 //
 2 //  Person+EE.h
 3 //  分类
 4 //
 5
 6 #import "Person.h"
 7
 8 @interface Person (EE)
 9 //{
10 //    int a;
11 //
12 //}
13 - (void)run;
14 @end

Person+EE.h

 1 //
 2 //  Person+EE.m
 3 //  分类
 4
 5 #import "Person+EE.h"
 6
 7 @implementation Person (EE)
 8
 9 - (void)run{
10     self.age = 10;
11     NSLog(@"调用了run方法=%d",self.age);
12
13 }
14
15 - (void)test{
16
17     NSLog(@"调用分类EE的test方法");
18
19 }
20 @end

Person+EE.h

 1 //
 2 //  Person+BB.h
 3 //  分类
 4 //
 5
 6
 7 #import "Person.h"
 8
 9 @interface Person (BB)
10
11 @end

Person+BB.h

 1 //
 2 //  Person+BB.m
 3 //  分类
 4 //
 5
 6
 7 #import "Person+BB.h"
 8
 9 @implementation Person (BB)
10
11 - (void)test{
12
13     NSLog(@"调用分类BB的test方法");
14
15 }
16 @end

Person+BB.m

分类的优先级 从下往上顺序可调

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #008400; background-color: #ffffff }

/*

分类:Category (类目,类别)(OC特有)

命名:Person+EE  (Person+ 自动生成,只要写后面的,一般以模块名为名)

分类的作用:在不改变原来类的内容的情况下,可以给我们的类添加一些方法

注意:

1>分类只能增加方法,不能增加成员变量

2>分类方法的实现中可以访问原来类中的成员变量

3>分类可以重写原来类中的方法,但是会覆盖掉原来类的方法(一般不会再分类当中重写原来类的方法)

4>调用优先级:分类优先(最后参与编译的分类会优先调用)

*/

原文地址:https://www.cnblogs.com/lanmaokomi/p/8434329.html

时间: 2024-11-09 08:39:56

ios 分类的相关文章

iOS分类底层实现原理小记

http://www.jianshu.com/p/b7169a5a558e OS 分类底层是怎么实现的?本文将分如下四个模块进行探究 分类的结构体 编译时的分类 分类的加载 总结 本文使用的runtime源码版本是 objc4 - 680文中类与分类代码如下 //类 @interface Person : NSObject @property (nonatomic ,copy) NSString *presonName; @end @implementation Person - (void)d

iOS分类、延展和子类的区别

iOS分类.延展和子类的区别 类别.延展.子类的区别   类别 延展 子类 功能 为类添加方法,不用知道类的源码,添加变量(通过运行时,具体参考下面注解) 为类添加私有变量和私有方法,在类的源文件中书写,所以知道类的源代码 即能为类添加方法又能添加变量 特点 添加的方法称为类的一部分,可以被子类继承 添加的变量和方法只有这个类内部访问,正常情况下外边不能访问(可以通过运行时,见注解),不能被子类继承 新添加的变量和方法只能子类才能具有,父类不具有 使用 使用原始类的对象(调用-方法)或者类(调用

iOS 分类和继承

iOS 中分类(Categories) 和 继承(Inherit)有相同的功能,但在一些细节上又有差异,简单介绍一下两者的异同. 分类可以在不知道系统类源代码的情况下,为这个类添加新的方法.分类只能用来添加方法,不能添加成员变量.通过分类增加的方法,系统会认为是该类类型的一部分.比如: 1 #import <UIKit/UIKit.h> 2 3 @interface UIImage (WB) 4 5 /** 6 * 返回一张自由拉伸的图片 7 */ 8 + (UIImage *)resized

关于 iOS 分类(Category)的实现代码

其实质是对一个类的扩充,对类扩充的方法有两种: (1)通过继承(经常用到) (2)通过分类 一个已知类Name 其头文件Name.h #import <Foundation/Foundation.h> @interface Name : NSObject @property(strong,nonatomic)NSString* nameStr; -(Name *)init:(NSString*)nameString; -(void)nameValue; @end 其实现文件 Name.m #i

iOS 分类:按顺序添加视图

一, 场景: 在一个父视图上添加多个子视图的情况下, 有可能出现添加视图的时机有先后的问题, 后来的视图会遮盖住先来的视图. 可以在添加子视图的时候, 获取需要展示的优先级大小..优先级越高, 就在已有视图更外层显示. 二, 分类方法代码如下: 1 // UIView+addsubview.h 2 3 @interface UIView (addsubview) 4 @property (nonatomic,assign) NSInteger sort; 5 - (void)addsubview

iOS Method Swizzling和分类的妙用AppDelegate轻量化处理

http://www.cocoachina.com/ios/20151117/14167.html 简介 在iOS工程中,AppDelegate往往会有上千行,甚至几千行,这样就会给维护AppDelegate带来诸多麻烦.比方说,老板想在出现HomeViewController之前弹出广告并停顿几秒,这样你就要加入插入广告的逻辑:又比方说,老板想在开始做个请求,判断某个开关是否打开.这样就会在AppDelegate中插入很多相关的不相关的代码. 在AppDelegate中,- (BOOL)app

10个优秀的Objective-C和iOS开发在线视频教程

如果你自己开发iOS应用,你肯定会发现网上有很多资源.学习编程的一个最好的方法就是自己写代码,而开始写代码的最快的方式就是看其他人怎么写.我们从海量视频和学习网站中整理出了我 如果你自己开发iOS应用,你肯定会发现网上有很多资源.学习编程的一个最好的方法就是自己写代码,而开始写代码的最快的方式就是看其他人怎么写.我们从海量视频和学习网站中整理出了我们认为对你学习Objective-C和iOS开发最有用的视频教程列表. 在线视频 iTunes U:iPhone和iPad  iOS 7应用开发教程(

10个优秀Objective-C和iOS开发在线视频教程

如果你自己开发iOS应用,你肯定会发现网上有很多资源.学习编程的一个最好的方法就是自己写代码,而开始写代码的最快的方式就是看其他人怎么写.我们从海量视频和学习网站中整理出了我们认为对你学习Objective-C和iOS开发最有用的视频教程列表. 在线视频 iTunes U:iPhone和iPad  iOS 7应用开发教程(斯坦福) 免费.这是斯坦福大学2013/2014学期关于开发iPhone/iPad  iOS 7应用程序的教程.讲师是Paul Hegarty,有18个讲座和几个课外作业.虽然

10个优秀Objective-C和iOS开发在线视频教程(转)

如果你自己开发iOS应用,你肯定会发现网上有很多资源.学习编程的一个最好的方法就是自己写代码,而开始写代码的最快的方式就是看其他人怎么写.我们从海量视频和学习网站中整理出了我们认为对你学习Objective-C和iOS开发最有用的视频教程列表. 在线视频 iTunes U:iPhone和iPad  iOS 7应用开发教程(斯坦福) 免费.这是斯坦福大学2013/2014学期关于开发iPhone/iPad  iOS 7应用程序的教程.讲师是Paul Hegarty,有18个讲座和几个课外作业.虽然