美文网首页
OC语言day07-02协议注意事项

OC语言day07-02协议注意事项

作者: liyuhong165 | 来源:发表于2016-06-30 23:25 被阅读39次

    pragma mark 协议注意事项

    pragma mark 概念

    /**
     //1. 协议只能声明方法,不能声明属性
     //2. 父类 遵守了某个协议,那么子类也会自动遵守这个协议
     //3. 在OC中一个类可以遵守1个或多个协议
     // 注意: OC中的类 只能有一个类,也就是说OC只有单继承
     // 4. OC中的协议 又可以遵守其他协议, 只要一个协议遵守了其他协议,那么这个协议就会自动包含其他协议的声明
    
     
    基协议
     NSOject
     类的NSObject
     @interface NSObject <NSObject> 
     
     协议的NSObject
     @protocol NSObject
     
     3.@required 和 @optional关键字
     @required 这个方法必须要实现(如果不实现,编译器会发出警告) (默认情况下)
     @optional 这个方法不定义要实现
    
     */
    

    pragma mark 代码

    #import <Foundation/Foundation.h>
    #pragma mark 类
    #import "Person.h"
    #import "Student.h"
    #import "Teacher.h"
    #pragma mark main函数
    int main(int argc, const char * argv[])
    {
        Person *p = [Person new];
        [p playBasketBall];
        [p study];
        
        Student *s = [Student new];
        [s playBasketBall];
        return 0;
    }
    

    协议

    SportProtocol.h //运动协议
    #import <Foundation/Foundation.h>
    
    @protocol SportProtocol <NSObject>
    //1. 协议只能声明方法,不能声明属性
    //{
    //    int _age;
    //}
    
    // 方法声明列表
    
    // 注意:如果没有使用任何关键字修饰协议中的方法,那么该方法默认就是required的
    @required
    // 如果协议中的方法 是 required的,  而遵守协议的类又没有实现该方法, 那么会报警告
    - (void)playFootball;       // 足球
    @optional   // 可选
    // 如果协议中的方法 是 optional的, 而且遵守协议的类 又没有实现该方法,那么不会报警告
    - (void)playBasketBall;     // 篮球
    - (void)playBaseBall;       // 棒球
    
    
    // 注意: @required 和 @optional 仅仅使用程序猿之间交流,并不能严格的控制某一个遵守协议的类必须要实现该方法,因为即便不实现也不会报错,只会报一个警告
    @end
    

    StudyProtocol.h //学习协议
    #import <Foundation/Foundation.h>
    
    @protocol StudyProtocol <NSObject>
    
    - (void)study;
    @end
    
    

    CrazySportProtocol.h //疯狂协议
    #import <Foundation/Foundation.h>
    #import "SportProtocol.h"
    // 4. OC中的协议 又可以遵守其他协议, 只要一个协议遵守了其他协议,那么这个协议就会自动包含其他协议的声明
    @protocol CrazySportProtocol <SportProtocol>
    
    //  跳楼
    - (void)jumping;
    @end
    @end
    
    

    Person.h //人类
    #import <Foundation/Foundation.h>
    #import "SportProtocol.h"
    #import "StudyProtocol.h"
    // 在OC中一个类可以遵守1个或多个协议
    // 注意: OC中的类 只能有一个类,也就是说OC只有单继承
    @interface Person : NSObject <SportProtocol,StudyProtocol>
    
    @end
    
    Person.m
    #import "Person.h"
    
    @implementation Person
    - (void)playFootball
    {
        NSLog(@"%s",__func__);
    }
    //
    //-(void)playBaseBall
    //{
    //    NSLog(@"%s",__func__);
    //}
    //
    //-(void)playBasketBall
    //{
    //    NSLog(@"%s",__func__);
    //    
    //}
    - (void)study
    {
        NSLog(@"%s",__func__);
    }
    @end
    

    Student.h //学生类
    #import "Person.h"
    
    // 2. 父类 遵守了某个协议,那么子类也会自动遵守这个协议
    @interface Student : Person
    
    @end
    
    Student.m
    #import "Student.h"
    
    @implementation Student
    -(void)playBasketBall
    {
        NSLog(@"%s",__func__);
        
    }
    @end
    

    Teacher.h //教师类
    #import <Foundation/Foundation.h>
    #import "CrazySportProtocol.h"
    @interface Teacher : NSObject<CrazySportProtocol>
    
    @end
    
    Teacher.m
    #import "Teacher.h"
    
    @implementation Teacher
    
    - (void)playFootball
    {
        NSLog(@"%s",__func__);
    }
    
    -(void)playBaseBall
    {
        NSLog(@"%s",__func__);
    }
    
    -(void)playBasketBall
    {
        NSLog(@"%s",__func__);
        
    }
    
    -(void)jumping
    {
        NSLog(@"%s",__func__);
    }
    @end
    

    相关文章

      网友评论

          本文标题:OC语言day07-02协议注意事项

          本文链接:https://www.haomeiwen.com/subject/ansfjttx.html