01 类目Category、延展Extension、协议Protocol、计数器的使用NSTimer

一、类目Category

*怎样为类添加一个方法:
  • 修改源代码
  • 编写此类的子类
*OC中常见的扩展方式:
  • 类目Category、延展Extension、协议Protocol
1、介绍:
  • 类目可以为一个现有的类添加新的方法
  • 类目与原类同级,是原始类的一部分,方法也同级
  • 类的类目新增的方法可以它的子类继承
2、注意事项
  • 类目中只能写方法,不能添加成员变量
  • 同一个类可以添加多个类目,但不能重名
  • 可以覆写现有类的方法,原方法不能被调用
3、类目的创建
  • command + N  >>  OS X 中 Objective-C File  >>  File Type 选择 类目Category
4、多重类目
  • 多重类目不要重写一个方法,如果重写了同一个方法,那么系统只调用重写后 方便调用的那个方法。
5、类目中方法的创建,和类中一样。只是没有实例变量(属性)




二、延展Extension

*、介绍
  • 在类的实现文件中定义的类目,叫做延展
  • 延展是匿名的类目,定义“私有”的方法
  • @interface  延展名 ()       //小括号里可写可不写
  • @end
  • 主要用来介绍 当前文件内哪些是闭源的 (闭源就是不访问,“私有的”,只有实现没有声明的)
  • 写在 .m 文件中,需要遵循 OC 书写规则。而 单独创建的的延展.h文件 没有语法检查


三、协议Protocol

1、概述
  • 协议声明了可被其他的类实现的方法
  • 协议不是类,只是一个其他类实现的接口
2、协议的创建与签订
  • @protocol 协议名    <必须遵守的协议>       ————(协议名称必须唯一)
  • @protocol Protocol <NSObject>      
  • @required  (默认类型)   放在方法声明前面,用来修饰必须实现的方法 。
  • @optional   可以选择实现的方法
  • @end   (结束)
3、协议的采用: 必须将协议的头文件 导入需要实现方法的目标类的头文件内,并<留名> 签订
  1. Tiger 采用 ZooRule协议
    • #import"ZooRule.h"
      @interface Tiger :NSObject <ZooRule>   //签订协议<协议名>
  2. 假如Tiger类 要同时采用两个协议
    • @interface Tiger :NSObject <ZooRule,ManagerRule>

    • 在协议中声明的方法,在类的 .h文件中就没必要再声明了。
    • 在实现文件文件中用 下列标记,方便程序的阅读与修改
    • 加注释方法:
    • #pragma mark -协议中@required
    • #pragma mark -协议中@optional
     
3、协议的作用
  • 协议写有达到某种功能所有需要的方法,而每个类可能只需要实现其中少数的几条方法。只有全部实现才能获得一系列的有用功能
4、协议和数据类型
  • 你可以在使用的数据类型中为实例变量和方法参数指定协议名称;
  • 如:id 类型表示一个可以指向任何类型的对象的指针,它是泛指对象类型。如果用一个尖括号<>括起来的协议名称跟随在id 之后,则编译器(或读者)将知道你期望任意类型的对象,只要遵守该协议。id<Delegate> _argent;


四、计数器的使用

1、TimerInterval:时间戳,每隔几秒调用一次。double 类型数据
2、target:调用方法的对象
3、selector:需要被调用的方法
4、userInfo:id  类型的用户信息,用以区分,在KVO会详细讲。可使用 nil
5、repeats:是否重复: YES /NO
  •     [NSTimerscheduledTimerWithTimeInterval:2
  •                                     target:self
  •                                   selector:@selector(test:)
  •                                   userInfo:@“Hello"
  •                                    repeats:YES];
  •     - (void)test:(NSTimer *)timer {

  •          id userInfo = timer.userInfo; //接收userInfo 信息
  •          [timerinvalidate]; //终止定时器

  •      }
6、让程序读到此处停下,但还在运行,直到某一个时间,再继续往下运行
  •    NSDate *date = [NSDatedateWithTimeIntervalSinceNow:10];
  •     [[NSRunLoopcurrentRunLoop]runUntilDate:date];
7、让程序一直运行在此处逗留
  •     //    [[NSRunLoop currentRunLoop]run];
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值