美文网首页
OC语言day07-05代理设计模式练习及规范

OC语言day07-05代理设计模式练习及规范

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

    pragma mark 代理设计模式练习及规范

    pragma mark 概念

    /**
     协议的编写规范:
     1. 一般情况下, 当前协议属于谁, 我们就将协议 定义都谁的头文件中
     2. 协议的名称 一般以它属于的那个类 的类名开头,后面跟上Protocol或者Delegate
     3. 协议中的方法名称 一般以协议的名称(方法) protocol之前的作为开头, 后面跟上该方法的用途的名称
     4. 一般情况下 协议中的方法 会将触发 该协议的对象传递出去
     5. 一般情况下 一个类中的代理属性的名称 叫做 delegate
     6. 当某一个类 成为另外一个类的代理的时候, 
        一般情况下在.h中 用 @protocol 协议名称; 告诉当前类 这是一个协议
        在.m中 用 #impert 真正的导入一个协议的声明
    
     */
    

    pragma mark 代码

    #import <Foundation/Foundation.h>
    #pragma mark 类
    #import "Student.h"
    #import "LinkHome.h"
    #import "LoveHome.h"
    #pragma mark main函数
    int main(int argc, const char * argv[])
    {
    #warning 用代理实现 学生找房子, 学生不具备找房子的能力
        /**
         所以学生可以找另一个对象来帮它找房子, 那么另一个对象就是学生的代理
         */
        
        Student *stu = [Student new];
        
        LinkHome *lh = [LinkHome new];
        stu.delegate = lh; // 帮学生找房子的 是链家 这个代理
    
    //    LoveHome *lh = [LoveHome new];
    //    stu.delegate = lh; // 帮学生找房子的 是我爱我家 这个代理
    
        [stu findHourse];
        
        
        return 0;
    }
    

    协议

    StudentProtocol.h
    // 帮学生找房子
    - (void)studentFindHourse;
    

    Student.h //学生类
    #import <Foundation/Foundation.h>
    //#import "StudentProtocol.h"
    
    /**
     协议的编写规范:
     1. 一般情况下, 当前协议属于谁, 我们就将协议 定义都谁的头文件中
     2. 协议的名称 一般以它属于的那个类 的类名开头,后面跟上Protocol或者Delegate
     3. 协议中的方法名称 一般以协议的名称(方法) protocol之前的作为开头, 后面跟上该方法的用途的名称
     4. 一般情况下 协议中的方法 会将触发 该协议的对象传递出去
     5. 一般情况下 一个类中的代理属性的名称 叫做 delegate
     6. 当某一个类 成为另外一个类的代理的时候, 
        一般情况下在.h中 用 @protocol 协议名称; 告诉当前类 这是一个协议
        在.m中 用 #impert 真正的导入一个协议的声明
    
     */
    @class Student;
    @protocol StudentProtocol <NSObject>
    
    // 帮学生找房子
    - (void)studentFindHourse:(Student *)stu;
    
    @end
    
    @interface Student : NSObject
    - (void)findHourse;
    
    //@property(nonatomic, strong)id<StudentProtocol> delegate;
    
    @property(nonatomic, strong)id<StudentProtocol> delegate;
    
    @end
    
    Student.m
    #import "Student.h"
    
    @implementation Student
    
    - (void)findHourse
    {
        NSLog(@"学生想找房子");
        
    //    // 通知代理 帮他找房子
        if ([self.delegate respondsToSelector:@selector(studentFindHourse:)]) {
    //        [self.delegate studentFindHourse];
            [self.delegate studentFindHourse:self];
        }
    }
    @end
    

    LinkHome.h //链家类
    #import <Foundation/Foundation.h>
    //#import "Student.h"
    
    // 一般不需要导入头文件 直接protocol 协议的名称
    // 类似  @class一样
    // 告诉 当前类 StudentProtocol 是一个协议
    @protocol StudentProtocol;
    
    @interface LinkHome : NSObject <StudentProtocol>
    
    @end
    
    LinkHome.m
    #import "LinkHome.h"
    #import "Student.h"
    
    @implementation LinkHome
    
    - (void)studentFindHourse:(Student *)stu
    {
        NSLog(@"%s",__func__);
    }
    @end
    

    LoveHome.h //我爱我家类
    #import <Foundation/Foundation.h>
    //#import "Student.h"
    @protocol StudentProtocol;
    @interface LoveHome : NSObject<StudentProtocol>
    
    @end
    
    
    LoveHome.m
    #import "LoveHome.h"
    #import "Student.h"
    @implementation LoveHome
    
    - (void)studentFindHourse:(Student *)stu
    {
        NSLog(@"%s",__func__);
    }
    
    @end
    

    相关文章

      网友评论

          本文标题:OC语言day07-05代理设计模式练习及规范

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