---恢复内容开始---

一Category

1Category 也叫分类,类目。是为没有源代码的类扩充功能

2扩充的功能会成为原有的类的一部分,可以通过原有类或者原有类的对象直接调用,并且可以继承

3该方式只能扩充方法,不能扩充实例变量

Category的文件创建

ios oc分类可以添加属性吗 oc类别和类扩展_代理设计模式

ios oc分类可以添加属性吗 oc类别和类扩展_ios oc分类可以添加属性吗_02

在类目的.h文件中声明需要添加的方法

@interface NSString (AddMethod) //声明sayHi⽅方法
+ (void)sayHi;
@end

在类目的.m文件中实现需要实现的方法

@implementation NSString (AddMethod) //实现sayHi⽅方法
+ (void)sayHi {
NSLog(@"我是牛逼的字符串"); }
@end

①在使用类目添加的方法首先要在对应的类中导入类目的.h文件

②sayHi方法是通过类目为NSString类添加的一个类方法,因此该方法的调用需要NSString类名调用

 

二Extension

1未能够获得源代码的类添加私有的实例变量和方法

2注意:延展操作的类必须是能够获得源代码的类

Teacher类中.m⽂文件中的代码
      @interface Teacher()
      {
NSInteger _salary; //存储对应的薪资 
}
- (NSInteger)getSalary; //声明⼀一个领⼯工资的⽅方法 
@end
@implementation Teacher
//实现领⼯工资的操作
- (NSInteger)getSalary { NSLog(@"这个⽉月发了不少,可以吃⼤大餐了"); 
 _salary = 1000;
return _salary;
}
@end
main.m中调⽤用getSalary
   Teacher *teacher = [[Teacher alloc]init];
   [teacher getSalary];
通过延展定义的⽅方法属于私有⽅方法,外界是没有访问权
限的,只能在当前类的.m⽂文件中访问。

Category 和Extension的区别

ios oc分类可以添加属性吗 oc类别和类扩展_类目_03

三delegate设计模式

 1delegate的三要素 委托方,代理方,协议

2委托方:委托别人去执行某些操作的人(对象)

3协议;(Protocol):委托方需要代理方执行的操作

4代理方:被委托去执行某系操作的人(对象)

delegate模式写使用案例

案例描述
结婚案例:有⼀一个⼥女孩结婚之前需要⾃自⼰己洗⾐衣服,做饭,挣
钱养活⾃己。但是有⼀一天⼥女孩不想再⾃自⼰己做饭,洗⾐衣服,挣
钱养活⾃己,因此她想要找⼀一个代理⼈人来帮她做,于是就想
到了结婚。
案例分析
对于做饭,洗⾐衣服,挣钱养活⾃自⼰己这些事情⼥女孩不
想⾃自⼰己做,想要通过结婚来找⼀一个男孩帮她做的过
程是⼀一个明显的代理设计模式。其中⼥女孩在该过程
中是委托⼈人,跟她结婚的那个男孩是代理⼈人,下⾯面
我们来看⼀一下如何通过代理设计模式实现该过程。
步骤1:⼥女孩制定协议
在⼥女孩的.h⽂文件中声明协议GirlDelegate
@protocol GirlDelegate <NSObject> - (void)cooking; //做饭
- (void)makeMoney; //挣钱养活⾃自⼰己 @optional
- (void)washing; //洗⾐衣服 @end
步骤2:⼥女孩定义delegate属性
在⼥女孩的.h⽂文件中声明协议GirlDelegate
@interface Girl : NSObject
//声明 delegate属性存储代理⼈人对象。<>代表遵循协议
@property (nonatomic, assign)id<GirlDelegate>delegate;
@end
步骤3:男孩遵守协议并实现协议⽅方法
男孩遵守协议(男孩的.h⽂文件中)
      #import <Foundation/Foundation.h>
      #import "Girl.h"
      @interface Boy : NSObject<GirlDelegate>
@end
步骤3:男孩遵守协议并实现协议⽅方法
男孩实现协议⽅方法(男孩的.m⽂文件中)
       @implementation Boy
       - (void)cooking {
NSLog(@"给⽼老婆做饭"); }
- (void)makeMoney { NSLog(@"挣钱养活⽼老婆");
}
//洗⾐衣服的操作可以选择实现 - (void)washing {
NSLog(@"为⽼老婆洗⾐衣服"); }
@end
•
步骤4:将男孩设置为⼥女孩的代理⼈人
在main.m⽂文件中完成的操作
//创建男孩对象
Boy *boy = [[Boy alloc] init]; //创建⼥女孩对象
Girl *girl = [[Girl alloc] init]; //将男孩设置为⼥女孩的代理⼈人对象 girl.delegate = boy;
•
步骤5:⼥女孩在合适的时机通知男孩做相应的操作
//模拟饥饿的操作
if ([girl.delegate respondsToSelector:@selector(cooking)]) {
//通知男孩去做饭
     [girl.delegate cooking];
}
注:respondsToSelector:该⽅方法判断对象是否能够对某⼀一个选定的⽅方法 做出响应。

 

---恢复内容结束---