一 类目

    类目:也称为类别,分类,用于扩展现有类,为其添加新的方法,不可以添加成员变量。

    注意:新添加的方法与原有方法同级,可以被继承;

           可以为同一类添加多个类目,但类目名和方法名不能重复,不要随意重写类中的方法;

 

    案例:

        //为NSString添加一个sayHello方法

        #import "NSString+SayHello.h"

        @implementation NSString (SayHello)

 

         //实现方法

       -(void)sayHello

        {

            NSLog(@"大家好,我是开发者");

        }

       在main中:

       

       结果为:大家好,我是开发者

 

       //在同一个NSString+SayHello.h文件下 为

          NSMutableString写一个拼接方法

        

         然后实现他:

              

        main函数实现:

        

         结果为: mycopystring

        //为NSMutableArray添加一个倒序方法

        

        实现:

         

        main函数实现:

                   

        结果:

        

 

       类目可以访问其继承的类的实例变量,类目的方法具有最高级的优先级,即它会覆盖掉原来类中相同名字的方法;

       类目的局限性:

       类目只能给已有的类添加方法,无法添加实例变量,类目没有位置容纳实例变量。

       此时可以通过字典类型的参数解决。

       如果类目中的方法和已有类中的方法名称冲突时,类目中的方法优先级要高。

       即调用这个方法时,类目中的方法会覆盖掉原来类中的方法,为了避免这种情况发生,类目中的方法名不要和原来类

       中的方法名字相同。

 

二 延展

    延展:为类添加私有方法

    案例:

    在Student.h文件中

     

     在Student.m文件中实现

     

     

     在main函数中:

     

总结:

      类目和延展的区别:类目(category)和延展(extension)的不同在于后者可以添加属性,另外后者添加的方法必须要实现

      延展可以认为是一个私有的类目。

 

三 协议

    在Objective-C中,一个类可以实现多个协议,通过协议可以弥补单继承的缺陷。但是协议跟继承不同,协议只是一个方    法列表,方法的实现得靠遵循该协议的类去完成。

    协议的声明和类的声明类似,不过协议的声明是用@protocol声明的一组方法列表。

    列表中的方法是由其他的类去实现,相当于类的@interface部分的声明

    方法的声明中,两个关键字:

     @required标注的方法为必须实现的方法;

     @optional标注的方法为可以选择实现;

     语法:

         @protocol 协议名称

          //方法列表

          @end

    案例:

         //在协议SaleHouseProtocal.h文件中 

         //声明一个协议

          

         接下来:

         //新建一个HouseHold类,相当于接收到这个协议,并管理这个协议,需要找个代理来实现这份协议(即寻找合适者签这份协议)

         //在HouseHold.h文件中

         

        //HouseHold.m文件中

        

        接下来:

        新建一个Manager类为delegate代理者

        //在Manager.h文件中

        

         在Manager.m文件中

         

         在main函数中:

         

        结果为:

       

       注意:在实现协议的时候,不光能实现一个协议,一个类可以同时遵循多个协议

       语法:

            @interface ClassName:父类名<协议1,协议2...>    

            @end 

            @implementation ClassName

               //实现协议中的方法

            @end

总结:

       协议声明了可以被任何类实现的方法。

       协议不是类,它是定义了一个其他对象可以实现的接口。

       如果在某个类中实现了协议中的某个方法,也就是这个类实现了那个协议。

       协议经常用来实现委托对象。一个委托对象是一种用来协同或者代表其他对象的特殊对象。

       协议与数据类型,协议可以当做变量,参数类型限定。

       在使用委托的时候,注意循环引用问题,委托的属性要使用assign,不要用retain。 

posted on 2014-04-23 19:28  APPstop  阅读(262)  评论(0编辑  收藏  举报