5.类的扩展之objective-c

1.类目(类目也称为分类,为没有源码的类(系统类、别人的类)添加方法)

    

    1)作用

    

        可以扩展别人的类,可以作为子类的替代方法。

        把同一类的代码放到多个文件中。

    

    2)形式

        

        文件名:.h文件(目标类+类目名.h)  .m文件(目标类+类目名.m)


    3)注意

    

        可以为同一个类添加多个类目,但类目名和方法不能重复

        不要随意重写原类中的方法

        所添加类与原类中方法同级,而且会被子类继承

    

    Demo:

    

        为字符串添加一个类目

        

        NSString+SayHi.h

    

        @interface NSString (SayHi)

        

        -(void)sayHi;//为字符串添加方法

        

        @end

        

    

        NSString+SayHi.m

    

        @implementation NSString (SayHi)

        

        -(void)sayHi

        {

            NSLog(@"我是一个特殊字符串 %@,我有sayHi方法",self);

        }

        

        @end

        

        

    

    

2.延展(延展是特殊形式的类目)

    

    1)作用

        

        为自己的类添加私有方法

    

    2)形式

        这是在.m文件中

    

        @interface  类名(延展名,可以为空

        

        -(返回类型)method

        

        @end

        

        @implementation 类名

        

        (返回类型)method

        {

            

        }

    

        @end

    

    3)注意

    

        不需要创建新文件,直接在原类的.m文件中声明和实现。

        所谓私有时候仅.m通过[self method]访问,不能在外部通过[对象 method]访问。

    

    Demo

        Person.h

        @interface Person : NSObject

        -(void)sayHi;

        @end

        

        Person.m

        @interface Person(extension)//延展

        -(void)test;//声明

        @end

        

        @implementation Person

        -(void)sayHi

        {

            [self test];

        }

        -(void)test//实现

        

        {

            NSLog(@"...");

        }

        @end

    

    

    

    

    

3.协议(协议是由@protocol 声明的一组方法列表,只声明方法,不具体实现)实例说明代理

    

    1)作用

    

        将方法定义剥离出来,形成一个单独的文件。

    

    2)形式

    

        @protocol 协议名<其他协议>

    

        @required

        -(返回类型)method

        

        @optional

        -(返回类型)method

    

        @end

        注:方法默认是@required 必须实现,如果可以不实现用@optional

    

    3)代理模式  (实例说明代理)

    (由别人帮自己实现某个功能的模式称为代理模式)

        

        接受代理(.h文件中)

        

            @interface 类名:父类名 <协议名1,协议名2,协议名3>(多个协议之间用逗号隔开)

        

            @end

        

        确认协议(.m文件中)

            

            @implementation  类名

                

                协议中声明的方法方法

                {

                }

        

            @end

        

            (代理=谁,谁接受并确认协议)

    

    4)注意

    

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

        协议定义了一个其他对象可以实现的接口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值