oc中代理的简单运用

今天和以为老同学聊了一些,深有感触,看它传值都是用代理写的,自己平时都是用block,通知之类的,基本不用代理,想想代理,感觉自己也有些模棱两可,所以动手写了一个代理简单运用的demo,写完之后思考了一番,在与block和通知做一些比较,豁然开朗,感觉自己在以后又多了一大助力。

我一贯的态度,做项目的思路源于基础,我不奢求自己什么都会,只要求自己学的都能基本掌握原理,从而达到心到,手到,运用自如。

关于代理之类的官方解释,我在此就不说了,不懂得,自己去查阅一些文档吧,这里只写它的原理和用法。

代理不是类,只是一个方法声明的文件,先看它的创建方法

file:///Users/mac/Desktop/01.png

file:///Users/mac/Desktop/02.png

代理文件中

//
//  ViewDelegate.h
//  代理的简单应用
//
//  Created by mac on 16/3/9.
//  Copyright © 2016年 WYP. All rights reserved.
//

#import <Foundation/Foundation.h>

@protocol ViewDelegate <NSObject>

- (void)creatViewInView;

- (void)addSub:(NSString *)str;

- (int)upSomething:(CGFloat)x;

@end

被委托方,签署代理,实现代理方法的一方

//
//  ViewController.m
//  代理的简单应用
//
//  Created by mac on 16/3/9.
//  Copyright © 2016年 WYP. All rights reserved.
//

#import "ViewController.h"
#import "SViewController.h"
@interface ViewController ()<ViewDelegate>//类签署协议

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    SViewController *view = [[SViewController alloc] init];
#warning 设置代理对象
    view.ViewDelegate = self;

}
#pragma mark ViewDelegate
- (int)upSomething:(CGFloat)x{

    NSLog(@"x:%.1f",x);
    return 15;
}
- (void)addSub:(NSString *)str{

    NSLog(@"str:%@",str);
}
- (void)creatViewInView{

    NSLog(@"创建了");
}

@end

委托方,调用代理方法的一方

//
//  SViewController.h
//  代理的简单应用
//
//  Created by mac on 16/3/9.
//  Copyright © 2016年 WYP. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "ViewDelegate.h"//引入协议
@interface SViewController : UIViewController
//设置协议属性,用于决定代理方法什么时候执行
@property (nonatomic, weak) id<ViewDelegate> ViewDelegate;

@end
//
//  SViewController.m
//  代理的简单应用
//
//  Created by mac on 16/3/9.
//  Copyright © 2016年 WYP. All rights reserved.
//

#import "SViewController.h"

@interface SViewController ()

@end

@implementation SViewController

- (id)init{
    if (self = [super init]) {

        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
//            判断如果代理对象不存在,不执行代理方法
            if (!_ViewDelegate) {

                return ;
            }
#pragma mark 调用代理中的方法
//            无参数也无返回值的代理方法
            if ([_ViewDelegate respondsToSelector:@selector(creatViewInView)]) {
                //外部判断,如果代理对象响应这个代理方法,才让其执行这个代理方法
                [_ViewDelegate creatViewInView];

            }

//            有参数无返回值的代理方法
            if ([_ViewDelegate respondsToSelector:@selector(addObject:)]) {

                [_ViewDelegate addSub:@"zhang"];
            }

//            有参数有返回值得代理方法
            if ([_ViewDelegate respondsToSelector:@selector(upSomething:)]) {

                int i = [_ViewDelegate upSomething:34.5];
                NSLog(@"i=%d",i);

            }

        });
    }
    return self;
}

- (void)viewDidLoad {
    [super viewDidLoad];

}
- (void)setViewDelegate:(id<ViewDelegate>)ViewDelegate{
    _ViewDelegate = ViewDelegate;

}

@end

时间: 2024-10-09 23:28:40

oc中代理的简单运用的相关文章

iOS OC中代理的使用

创建一个空的工程 在工程中我们新建一个类 继承与NSObject 定义一个协议‘ @protocol UpdateAlertDelegate <NSObject> //这里的红色字体就是我们定义的协议的名称 - (void)updateAlert;//这个就是如果某个类要遵循此协议必须实现的一个方法,有参数或者无参数视情况而定 @end @interface TimerControl : NSObject @property (nonatomic, weak) id<UpdateAler

OC中的代理模式

OC中的代理模式,关于代理模式,如果还有同学不太清楚的话,就自己去补充知识了,这里就不做介绍了,这里只介绍OC中是如何实现代理模式的.这里举一个简单的例子:小孩类,护士类,保姆类,其中小孩类有两个方法:wash和play这里代理对象就是:护士类.保姆类,小孩类是被代理对象.看一下代码:首先看一下小孩类:Children.h[objc]  view plaincopy 1. //   2. //  Children.h   3. //  12_DesignStyle   4. //   5. //

OC中使用UI自定义控件实现计算器的设计(版本1简单的加减乘除,连加,连减,连除,连乘)

OC中使用UI自定义控件实现计算器的设计(版本1简单的加减乘除,连加,连减,连除,连乘) #import <UIKit/UIKit.h> @interface ViewController : UIViewController<UIApplicationDelegate> { float _operator1; float _operator2; float _result; } @end #import "ViewController.h" @interfac

小结OC中Retain cycle(循环引用)

retain cycle 的产生 说到retain cycle,首先要提一下Objective-C的内存管理机制. 作为C语言的超集,Objective-C延续了C语言中手动管理内存的方式,但是区别于C++的极其非人道的内存管理,Objective-C提出了一些机制来减少内存管理的难度. 比如:内存计数. 在 Objective-C中,凡是继承自NSObject的类都提供了两种方法,retain和release.当我们调用一个对象的retain时,这个 对象的内存计数加1,反之,当我们调用rel

iOS开发——网络开发OC篇&amp;OC与JS交互简单案例

OC与JS交互简单案例 网页开发中三个重要的知识,这里就不详细介绍了! Html:页面代码 Css:样式 javascript:响应 先来看一段html的简单代码,里面涉及了上面的三个部分(很简单) 1 <html> 2 <!--描述网页信息--> 3 <head> 4 <meta charset="UTF-8"/> 5 <title>hello world</title> 6 <script> 7 f

swift中代理的使用

下面以自定义的UITableViewCell的代理为例,记录一下swift中代理的使用 controller中的代码如 1 // 2 // ViewController.swift 3 // simpleDemo 4 // 5 // Created by liubo on 16/7/25. 6 // Copyright © 2016年 liubo. All rights reserved. 7 // 8 9 import UIKit 10 11 class ViewController: UIV

【原】谈谈对Objective-C中代理模式的误解

[原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective-C中的delegate大部分用法属于委托模式.全文有些抠概念,对实际开发没有任何影响. 前段时间看到的一篇博客iOS开发——从一道题看Delegate,和这篇博客iOS APP 架构漫谈解决的问题类似.两篇blog都写得很不错,都是为了解决两个页面之间的数据传递问题: A页面中有一个UILabel

OC基础 代理和协议

OC基础 代理和协议 1.协议 (1)oc语言中得协议:一组方法列表,不需要我们自己实现,由遵守协议的类来实现协议所定制的方法. (2)协议的使用步骤:制定协议-->遵守协议-->实现协议-->调用协议. (3)协议声明的关键字: (a)@required,必须实现,不实现的话在.m文件内会报警告. (b)@optional,可选实现,不实现的话在.m文件内也不会报警告. (4)协议和继承的区别: (a)相同之处:都可以规范统一类中的方法. (b)不同之处:继承的子类不需要再实现一遍父类

OC中的属性特征

在刚开始学习oc的过程中,一直对声明完返回值后的属性特征不咋明白啥意思,今天特地找了一下资料,彻底的明白其中的意思. oc中的属性特征主要有assign,copy,retain这三个主要的,还有readonly,readwrite.   另外,atomic和nonatomic:以及strong,weak. assign主要是针对基础类型数据和c数据类型的简单赋值,而且它不调用索引计数器(retain count). retain主要是指调用oc中的对象,对oc中的对象进行赋值(主要针对NSObj