其他分享
首页 > 其他分享> > OC-基础2

OC-基础2

作者:互联网

1. 类目的基本概念和用法

  注意有两种创建方法,调用方式相同,符合继承特性。

  

   

  类目可以弥补oc单继承的缺陷。更好的方法是用协议去代替。以下为类目和继承的对比。可以有一组,这里只写了一个作为示例。

  

  @interface有三种类型:类、类目、延展。有时把类目写倒类里面去,有时单独提出来。如下示例,还可以接着往后面续,很想cpp的命名空间。里面可以任意写方法、成员变量等。类目就像变量名一样,是给方法取了一个名字便于区分。实际使用不会取访问。

  

  重点:如果和原来的类里面名称重复会发生什么?类目优先级更高,会覆盖原来的。Fundation框架里面用的很多。

  示例,转换数字为数组,注意这里的release的方法是在return的时候声明:

  

 

2. 延展的基本概念

  类目就是括号里面有内容,延展就是只有括号没有内容,如同匿名的类目:

  

  延展的声明、实现都是在m文件,对外是可见的。延展里面的私有方法(减号)被外部调用会报警告(新版本很有可能变了),但可以正常调用。

  有时主要通过定义延展的方式定义类的私有方法。

  和类目的区别:一个h文件声明,一个m文件里面声明。

3. 协议的基本概念和用法

  协议看起来类似于类的接口 ,定义一组方法去让别的类实现。没有父类和实例变量。协议可以被任何类实现。oc是单继承的,协议可以弥补该缺陷。

  类目也可以采用协议(不多)。

  

  协议也是有基协议的,尖括号可以省略,基协议也可以被使用。下面示例中NSObject就是该协议的基协议。

  @optional:采用该协议的类可以不用去实现的一组方法

  @required:采用该协议的类必须要去实现的一组方法。

  缺省的默认是required

  使用继承的方式去使用一个协议。

   

  协议的主要作用是在设计模式中的应用(代理模式)

  

  其实就和多态的那一套很像,但是属于精简版的,类似于cpp中的纯虚基类。 

   

  下面是协议/代理的一些使用案例:

   

4. 代理设计模式

  代理的类型是id自动类型,因为要实现的可以是各种类型。

  初始化的时候设置好委托人。Person要找房子,Agent可以找房子,都要继承找房子这个协议。

  以下是一个代理的实例

  main.m:

    

    效果:jack一去找房子就会触发定时器去调用该方法。

   Persion.h

    

    用assign防止循环引用。这个人找的这个代理,要具备找房的能力。

  Persion.m

    

    更新initWithName方法,给delegate赋值,到此,初始化这个人的时候就设置好了委托人是谁:

     注意,一定要设置代理

    再给Persion加个定时器,每两秒钟去找一次房子,先加个私有方法startFindApartment:

     加个参数:

    定时器加在initWithName后面,NSTimer会返回NSTimer的实例:

      userInfo这里的字符串可以传给startFindApartment函数。填nil吧还是。

    如果tarrget填agent,那么可以去agent里面实现startFindApartment这个方法,就调到agent里面去了

     上面不传参数了,改成如下方式,点击跳转的时候会有两个提示,一个是在协议里面的findApartment,一个是在agent里面的。

    

  FindApartment.h(协议)

    

  Agent.h

    

  Agent.m

    

 

 

 

  

  

  

 

  

 

  

   

 

  

 

标签:协议,里面,OC,可以,基础,延展,方法,类目
来源: https://www.cnblogs.com/abnk/p/13507394.html