zoukankan      html  css  js  c++  java
  • 关于 object-c的@protocol的理解

    从java角度来理解 

    @protocol 相当于 java 的接口定义,用法也一样

     

    下面是试验例子

     

    @protocol mytestClass <NSObject>
    
    - (void) callback:(int) num;
    
    @end
    
    @interface DiscoveryController : UIViewController<mytestClass>{
        UIImageView *imageView;
        
    }
    -(UIImage *) getImageFromURL:(NSString *)fileURL;
    
    @end
    

      在这里定义了protocol并由类

    DiscoveryController实现此接口

    @interface MyCallBack : NSObject
    {
        id<mytestClass> deleage;
    }
    @property(nonatomic,retain) id<mytestClass> deleage;
    - (void)setRun;
    @end
    

      

    MyCallBack中保存从其它类传过来的
    deleage当需要时进行回调。

    //
    //  MyCallBack.m
    //  ACMobile
    //
    //  Created by mr.liang on 15/1/22.
    //  Copyright (c) 2015年 mr.liang. All rights reserved.
    //
    
    #import "MyCallBack.h"
    
    @implementation MyCallBack
    @synthesize deleage;
    
    - (void) runThread
    {
        NSLog(@"我在运行");
        [NSThread sleepForTimeInterval:2];
        [deleage callback:1];
    }
    
    - (void)setRun
    {
        NSThread *callbackthread = [[NSThread alloc] initWithTarget:self selector:@selector(runThread) object:nil];
        [callbackthread start];
    }
    @end
    

      这里通过线程进行异步回调会让程序更加直观。

        MyCallBack *vv = [[MyCallBack alloc] init];
        vv.deleage = self;
        [vv setRun];
    

      需要用到protocol的地方实现这个protocol并传送指针;

    互联网的一点事 www.yidin.net

  • 相关阅读:
    mysql 备份脚本
    (四)监控cpu
    (三)修改图形乱码问题
    (二)centos7安装zabbix agentd端
    (一)Centos7安装zabbix3.4 server端
    (五)条件测试
    (四)mysql数据类型
    (三)mysql数据库基本操作
    (二)mysql忘记root密码
    (五)cobbler自定义系统安装
  • 原文地址:https://www.cnblogs.com/ondream/p/4242276.html
Copyright © 2011-2022 走看看