当前位置:首页 » 代理许可 » ios代理

ios代理

发布时间: 2020-11-25 05:17:48

① ios 判断有没有实现代理协议

【iOS开发技术分享】协议与代理
【iOS开发技术分享】协议与代理

一、理解协议与代理

协议:

协议是一个方法签名的列表,在其中可以定义若干个方法。根据配置,遵守该协议的类会去实现这个协议中规定的若干个方法。

代理:

代理是一个概念,很难用一个名词去定义(如我们可以说协议其实就是一个方法列表)。它更像是一种关系,我要做某一个事情,但我自己不想去做这件事,我委托其他人帮我去做这件事。这个时候,这位其他人就是我的代理。

二、协议的使用

在定义协议时,可以通过@required与@optional来配置遵守这个协议必须去实现的方法和可以选择的方法。譬如:

@protocol MyChooseDayViewDelegate<NSObject>
@required
- returnChooseDay:(id)myChooseDayView;
@optional
- hideThisView;
- changeDateFormatter:(NSString*)formatString;
@end
在定义的协议 MyChooseDayViewDelegate中,如果遵守该协议,就必须实现协议中的- returnChooseDay: 方法,同时可以根据实际程序要求去实现- hideThisView 与 - changeDateFormatter: 。

同时,协议支持对本身的一种扩展,譬如:

@protocol MyChooseTimeViewDelegate< MyChooseDayViewDelegate>
- doSomething;
@end
MyChooseTimeViewDelegate
扩展了MyChooseDayViewDelegate这个协议,也就是说,假如遵守了MyChooseTimeViewDelegate的话,也必须实
现MyChooseDayViewDelegate中的方法(@required)使用分类的话,就是在定义类的头文件中使用<>
将所需要的协议引入,如果引入多个协议,用","分隔,譬如:

@interface MyClassView:UIViewController <MyChooseDayViewDelegate, UIAlertViewDelegate>
//TODO: balabalabala...
@end

想要检查某个类是否实现了某个协议或者某个类是否实现了某个协议的方法,可以通过以下方式来进行测试

//获取某个对象
MyClassView *myClassView = xxxxxxx;
//判断该对象是否实现了MyChooseDayViewDelegate协议
if([myClassView conformToProtocol:@protocol (MyChooseDayViewDelegate)]){
//TODO: balabalabala...
}
//判断对象是否实现了某个方法就用我们经常会使用到的
if([myClassView responseToSelector:@selector(xxxx)]){
//TODO: balabalabala...
}

三、代理
代理在iOS开发会被经常使用,而且代理的使用往往配合着协议。我重复一次我对他的理解,我要做某一个事情,但我自己不想去做这件事,我委托其他人帮我去做这件事。
举例来说,我在办公室里正在写代码,突然发现口
很渴像喝瓶冰百事,但下楼是件麻烦的事情,我不愿意下楼。这个时候我想起小卖部可以商品加价2元就外送到家服务,我就打电话给小卖部,委托小卖部给我送一
瓶水上来。这个时候,小卖部就是我的代理,我委托他帮买水并送上来。这个例子中小卖部是我的代理,商品加价2元外送到家服务就是商品买卖协议(这个叫法肯
定不是最佳的,姑且这么叫吧)中的一个方法。
不要觉得麻烦,我们再最后理一遍,小卖部遵守商品买卖协议,我让小卖部成为了我的代理,代替我完成了买瓶冰百事的事情。
以iOS开发的角度来说,UIViewController想使用一个tableview,需要遵守UITableviewDataSource,UITableViewDelegate这2个协议,同时设置tableview的代理为自身,才可以完整的实现Table。

四、代理与协议的使用
我尽可能的用代码来进行描述,但首先需要进行一些context铺垫
我想实现的功能:我要自定义一个View,这个
view可能展示了我自己项目中特定的一些信息,它可能是若干控件的组合,譬如UITextField、UISwitch、UIDatePicker、
balabalabala...我们姑且叫这个view为myInformationView 我在一个ViewController使用了这个
view,为了方便,这个ViewController就叫myRootViewController。在使用这个myInformationView
时,我需要即时的在myRootViewController获取并做相应的处理。这是我想实现的功能。
接下来,就是开始写代码的时刻:
1.首先是一个protocol

#import <Foundation/Foundation.h>
@class MyInformationView;

@protocol MyInformatioViewDelegate<NSObject>
@required
@returnValueToShow:(MyInformationView*)myInformationView;

@end

2.MyInformationView

#import <UIKit/UIKit.h>

@interface MyInformationView : UIView

@property (nonatomic, strong) id<MyInformationViewDelegate> myDelegate;

- (id)initWith......//初始化视图的方法
//所需要的属性和方法根据实际需要再行添加
@end
#import "MyInformationView.h"
@interface MyInformationView()

@end

@implementation MyInformationView
@synthesize myDelegate = _myDelegate;

//Todo: 处理一些初始化方法和其他一些事件

// changeMyInformationData 是操作此view可能产生的数据变动。它可能是选择器变动、点击按钮等等,但我们并不想在此view处理它,因为它的变动可能对调用此view的controller造成影响,所以...
- (void) changeMyInformationData:(id)sender

//TODO:数据变动....
if ([self.myDelegate respondsToSelector:@selector(returnValueToShow:)]) {
[self.myDelegate returnValueToShow:self];
}


@end

3.ViewController
这里就不写代码了,在头文件中声明此类遵守MyInformationViewDelegate协议。在实现文件(.m)中,调用MyinfomationView的时候,设置代理成自己,
MyInformation *myInfoView = [[MyInformation alloc] init.......];
myInfoView.myDelegate = self;
然后实现协议中要求实现的方法

- (void)returnValueToShow:(MyInformationView*)myInfoView
{
//TODO:做想做的事情
}

② ios怎么用代理获取手机所有网络请求并分析

怎么代理或手机的联网的一些分析情况介绍给我查一下。

③ ios 怎么设置数据代理

//设置代理 和方法 属性
@protocol detailNoteProtocol <NSObject]]>

- (void)aa;

@end

//声明代理属性
@property (nonatomic, assign)id<detailNoteProtocol>delegate;

//制定接受代理方
if (_delegate && [_delegate respondsToSelector:@selector(aa)]) {
[_delegate aa];
}

接受代理

在.h 里面
引入头文件, 接受代理协议,
在.m 里面
实现代理方法 , 记着写 : _detailVC.delegate = self;

④ iOS中,代理是什么

你是问开发中的代理么?还是网络的代理?
如果你是问开发中的代理的话,这是专设计模式,简单点说,就属是一个类实现不了或者不能实现的功能交给另一个能实现功能的类去做,就是代理。代理是一种常用的设计模式,如果做开发的话,建议你还是多看看这块的东西。
如果你是问ios系统中网络的代理的话,那可以理解为VPN。浏览国外网站的时候需要设置代理。

⑤ iOS代理了协议之后没法正常回调

关于代理不回调问题有以下几问题:
1. 没有设置代理 XXX.delegate = self 
2. 方法名写错 
3. 新方法得判断iOS版本 
4. 引用对象被释放了 
5. 具体功能info.plist配置错误 
6. 在block中设置有时会出现代理不回调问题(用通知代替)
错误1,2 :
对于错误1,2一般是很新的新手或者老手脑袋短路极不正常时犯的错误。
错误3 :
这个错误一般也可以忽略,因为使用高级API程序直接会崩溃。 错误4
引用对象呗释放了。
这个错误较之于上面三个有点难度,解决这个错误需要对内存管理有所了解.如果内存管理不好,这里也很容易出现EXC_BAD_ACCESS崩溃.所以检查对象的生命周期,代理要设置成全局变量,不要设置成局部变量。
代理设置使用weak,避免造成循环引用.而且要在dealloc方法中将代理设置为nil。
* 注意: 不要使用assign,因为assgin类型在使用结束后不会设置成nil,此时发消息的话会EXC_BAD_ACCESS。
错误5
这个问题是在处理特定功能时才能遇到的,不具有普遍性.比如使用CLLocationManager获取地理位置时不进代理的回调.你代理明明设置的很清楚,也遵循代理了,对象也没有被释放,但是代理就是不进,是不是很迷惑很纠结. 此时代理不进的另一个原因就是info.plist没有配置正确。
因为获取地理位置需要配置info.plist的属性: 或者。
错误6
关于这个问题具体什么需求可以以后讨论一下,如果大家也遇到这个问题,这里可以作为一个小参考。

⑥ iOS 代理和通知的区别

------共同点
利用通知和代理都能完成对象间的通信。(比如A对象告诉D对象发生了什么事情,A对象传递数据给D对象)

------不同点
代理:只能是一对一的关系(一个对象只能告诉另外一个对象发生了什么事情)
通知:多对多关系(一个对象能告诉N个对象发生了什么事情,一个对象能得知N个对象发生了什么事情)

⑦ iOS代理和通知的区别

代理耦合度更高A、复B、C、D需要有生命周制期的耦合,代理用于比较明确的实例间的通知关系,比起通知可读性会更好;
通知虽然耦合低但不能被滥用,适合单纯广播行为,因为可能B、C、D类不止一个实例,但期望的只是通知部分实例;通知还考虑多线程调用;
从模式上,一种是代理模式,一种算是观察者模式。

⑧ 在ios 中,代理的方法怎么实现

委托代理(degegate),顾名思义,把某个对象要做的事情委托给别的对象去做。那么别的对象就是这个对象的代理,代替它来打理要做的事。反映到程序中,首先要明确一个对象的委托方是哪个对象,委托所做的内容是什么。
A的头文件:

[objc] view plain
#import <Foundation/Foundation.h>

@protocol <NSObject>

@optional

- (void)timeTickOut:(BOOL)backToSecret;

@end

@interface SecretGardenPicPopView : UIView
{
id<> _delegate;
}

@property (nonatomic, assign) id<> delegate;

@end

A的 .m 文件

[objc] view plain
#import "SecretGardenPicPopView.h"
#import "AppDelegate.h"

@implementation SecretGardenPicPopView

@synthesize delegate = _delegate;

- (void)dealloc
{
self.delegate = nil;
[super dealloc];
}

- (void)changeTimeTextLabel:(NSTimer *)timer
{
NSLog(@"===计数===>%d",_timeCount);
if (0 <= _timeCount) {
_timeLab.text = [NSString stringWithFormat:@"%d''", _timeCount];
} else {
[timer invalidate];
NSLog(@"代理===>%p",_delegate);
if (_delegate && [_delegate respondsToSelector:@selector(timeTickOut:)]) { //只有当代理存在,且timeTickOut方法被实现的时候才执行下面的语句
NSLog(@"执行代理");
[_delegate timeTickOut:NO];
}
}
_timeCount -= 1;
}

@end

B的头文件:

[objc] view plain
#import "SecretGardenPicPopView.h" //A的头文件

@interface SecretGardenController : BaseController<> //A的代理

@end

B的 .m文件:

[objc] view plain
- (void)timeTickOut:(BOOL)backToSecret
{
//Do Something
}

⑨ ios怎样可以不连wifi使用http代理

1、首先,要有一个http代理。
2、关闭,就是直连,不经过代理;手动,就是把代理设置进去,填写好http代理服务器的地址、端口(如果有需要,写帐号密码进去),这样所有的数据通信都会走http代理;自动,就是要配置pac文件,这样经过配置后,根据设定的,有些数据走代理,有些数据走直连。

⑩ ios开发 页面层级太多怎么传递代理

一般而言层级关系太多都会选择用通知,而不是代理,只要发出通知不管在哪里都能够监听。
我做项目的时候也经常遇到这样的情况,有一种情况是一个页面有很多个不同类型的 cell, 每个cell中都有很多自定义子控件,控制器需要监听这些子控件的相关出发事件,这种情况我选择了代理没有选择通知 ,因为是不同类型的cell ,我使用的是cell工厂模式,都是批量操作,代理批量操作比较方便。
如果你不属于我这样的批量操作,建议用通知。

热点内容
美发店认证 发布:2021-03-16 21:43:38 浏览:443
物业纠纷原因 发布:2021-03-16 21:42:46 浏览:474
全国著名不孕不育医院 发布:2021-03-16 21:42:24 浏览:679
知名明星确诊 发布:2021-03-16 21:42:04 浏览:14
ipad大专有用吗 发布:2021-03-16 21:40:58 浏览:670
公务员协议班值得吗 发布:2021-03-16 21:40:00 浏览:21
知名书店品牌 发布:2021-03-16 21:39:09 浏览:949
q雷授权码在哪里买 发布:2021-03-16 21:38:44 浏览:852
图书天猫转让 发布:2021-03-16 21:38:26 浏览:707
宝宝水杯品牌 发布:2021-03-16 21:35:56 浏览:837