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蓝牙开发有以下三种目的:
1. IOS设备和IOS设备之间交互
好消息是:ios6.0可以把iPhone手机当从设备了,可以两台iPhone通过蓝牙通信传数据了,有点类似spp协议
坏消息是:我们需要的不是这种模式
这种模式通常用于两个使用IOS设备的土豪之间互相切磋游戏,玩个飞车什么的,需要注意的是
2. IOS设备与MFI认证设备交互
什么是MFI认证呢?意思是(Make For ipod/ipad/iphone),只有少数的硬件厂商才有苹果的MFI认证,如果你看到这,你的蓝牙设备还没设计,而且想发布在AppStore上,而且打算使用蓝牙4.0以下(4.0就不需要MFI了,福音),那你还是找个MFI认证的硬件开始做吧,我们公司已经有产品了,不可能重新设计,方案Pass了。
好消息是:如果你的蓝牙模块还没设计,打算在AppStore上发布,打算使用蓝牙4.0以下(IOS设备都兼容),那你就抓紧找MFI认证的蓝牙模块吧
坏消息是:我们不可能重新设计,所以舍弃
3. IOS设备与非IOS设备交互
这就是我们的现状了,根据这个现状,我们能分析出两种情况:
a. 我想做蓝牙4.0以下的,这样iphone4也能用了
好消息:确实可以兼容iphone4,但是由于苹果封闭,没有那个API给你调,苹果上也根本检索不到非IOS设备,所以你就需要越狱了,调用私有Api连接设备
坏消息:只有越狱的手机才能用,发布到AppStore是妄想
b. 我想做蓝牙4.0的,不全兼容也没事,我想发布在AppStore上
好消息:苹果开放了4.0的BLE通道,你可以用BLE通道通信,而且4.0设备也能检索到
坏消息:对IOS版本和IOS设备双重要求,肯定不能全兼容了
所以,根据你自己的实际情况,选择方案,现总结出以下几种方案:
1. 情景:蓝牙2.0,发布在AppStore上
答:使用MFI认证的蓝牙模块设计你的蓝牙产品
特点:不越狱就能用,IOS设备全兼容
2. 情景:蓝牙2.0,不用MFI
答:不能用苹果的Api了,使用私有Api连接设备
特点:只能越狱的手机才能用了,IOS设备全兼容
3. 情景:蓝牙4.0
答:使用BLE通道
特点:IOS设备不完全兼容,无需越狱,无需使用MFI,可发布在AppStore上
注意:一定要看你的蓝牙版本,这样才能选择方案,我们现在设备的版本是2.0,但是Boss想要发布在AppStore上,所以打算升级成4.0的,只有这么办了
Ⅲ 现在iOS上的IM都用什么协议或者框架来实现
xmpp,但是开发的话一般小公司都是接第三方即时聊天功能, 不会自己去写服务端和客户端,因为那样比较浪费时间如果说你们公司的项目严密度非常高,信息不想透漏给第三方,我建议还是自己组建一个团队, 有一个很牛的后台来开发im的服务端,也就是使用socket,或者现成的xmpp协议上开发服务端, 前台做客户端。 然后实现即时通讯功能。
Ⅳ ios最终用户许可协议 有什么用
本《最终用户使用许可协议》(以下称《协议》)是您(个人或单一实体)与上海盛大网络发展有限公司之间有关上述网络游戏软件产品(即网络游戏《热血传奇》,英文名《Legend of Mir II》,以下简称“软件产品”)使用的法律协议。
本“软件产品”包括计算机软件,并可能包括相关网络服务器、网站、电子媒体、印刷材料和“联机”或电子文档。您一旦安装、复制、访问、充值或以其它方式使用“软件产品”,即表示您同意接受本《协议》各项条款的约束。如您不同意本《协议》中的条款,请不要安装或使用“软件产品”。
1. 许可权利的授予。本《协议》授予您下列权利:指定应用软件的安装使用。您可在许可生效的时间内将其安装在自己使用的联网计算机、工作站上并以相关方式互相作用于(“运行”)本“软件产品”的一份副本。其他任何形式的未经许可的安装、使用、访问、显示、运行以及转让,都将被视为对《协议》的侵犯。
2. 依本合同规定,著作权人仅授权本产品的全部或部分内容在一台计算机使用。产品可以载入个人电脑或永久存取装置的方式使用。本产品可由一部个人电脑移转到另一部个人电脑使用,但不得同时存在于两部电脑中。依本合同第9项移转给他人时,使用者载入个人电脑的部分应予以删除,不得留存使用。
3.限制性行为或活动
侵害线上游戏公平性的行为包括但不限于:
3.1 利用反向工程、编译或反向编译、反汇编等技术手段制作软件对游戏进行分析、修改、攻击,最终达到作弊的目的;
3.2 使用任何外挂程序或游戏修改程序,对线上游戏软件进行还原工程、编译或译码,包括修改本软件所使用的任何专有通讯协议,或对动态随机存取内存(RAM)中资料进行修改或锁定;
3.3 使用异常的方法登陆游戏、使用网络加速器等外挂软件或机器人程式等恶意破坏服务设施、扰乱正常服务秩序的行为;
3.4 传播外挂、封包、加速,及其它各种作弊软件程序,或组织、教唆他人使用此类软件程序,或销售此类软件程序而为私人或组织谋取经济利益;
3.5 使用任何方式或方法,试图攻击提供游戏服务的相关服务器、路由器、交换机以及其他设备,以达到非法获得或修改未经授权的数据资料、影响正常游戏服务,以及其他危害性目的的任何行为;
3.6 利用线上游戏系统可能存在的技术缺陷或漏洞而以各种形式为自己及他人牟利。
4. 对反向工程(Reverse Engineering)、反向编译(Decompilation)、反汇编(Disassembly)的限制。您不得对本“软件产品”进行反向工程(Reverse Engineering)、反向编译(Decompile)或反汇编(Disassemble),但尽管有这项限制,如适用法律明示允许上述活动,则不在此限。
5. 对使用外挂的游戏附加程序的限制。您不得设计、编制或使用任何可能危害上述软件产品正常运行、或破坏软件中设计的游戏平衡性、或损害其他用户正常使用权利的附加性游戏程序或工具。任何设计、编制或使用此类程序的行为,都将被视为对《协议》的违反,盛大网络有权对此采取一切必要的处理措施,包括直接删除发生此类行为的用户账号,并保留采取进一步法律措施的权利。
6. 服务条款的确认和接纳。本“软件产品”的所有权和运作权归上海盛大网络发展有限公司。盛大网络提供的服务完全按照其发布的章程、服务条款和操作规则严格执行。您应该遵守盛大网络制定的上述管理规定。如果您发生违反此类管理规定的行为,盛大网络可终止本《协议》并停止您使用“软件产品”的权力。如此类情况发生,您必须销毁“软件产品”的所有副本及其所有组成部分。
7. 用户必须的设备和须提供的信息。盛大网络提供可使用的“软件产品”,并运用自己的网络系统通过国际互联网络(Internet)为用户提供服务。同时,用户必须:
(1)自行配备上网的所需设备, 包括个人电脑、调制解调器或其他必备上网装置。
(2)自行负担个人上网所支付的与此服务有关的电话费用、网络费用。
基于盛大网络提供服务的重要性,用户应同意:
(1)提供详尽、准确的个人资料。
(2)不断更新注册资料,符合及时、详尽、准确的要求。
如果用户提供的资料包含有不正确的信息,盛大网络保留结束用户使用网络服务和使用“软件产品”资格的权利,用户由于没有提供正确的资料而产生的任何后果盛大网络不承担任何责任。
8. 拒绝提供担保。用户个人对网络服务的使用承担风险。盛大网络对此不作任何类型的担保,不论是明确的或隐含的。盛大网络不担保服务一定能满足用户的要求,也不担保服务不会受中断,对服务的及时性,安全性,出错发生及可能发生的用户损失都不作任何形式的担保。
9. 有限责任:盛大网络对任何直接、间接、偶然、特殊及继起的损害不负责任,这些损害可能来自:不正当使用网络服务,非法使用网络服务或用户传送的信息有所变动等方面。
10.使用者可以移转本产品和所授之权利予他人,但是移转时应连同所附产品使用手册、授权合同等一并移转,不得留存任一样使用。且该转得者视同接受遵守本合同规定。
11.除本合同有其他规定外,未经著作权人书面同意,使用者严格禁止有下列行为(无论是有偿的还是无偿的):
11.1复制、翻拷、传播和在网络上陈列本产品的程序、使用手册和其它图文音像资料的全部或部分内容。
11.2公开展示和播放本产品的全部或部分内容。
11.3出租本产品于他人。
11.4对本产品的程序、图象、动画和音乐进行还原、反编译、反汇编、剪辑、翻译和改编等任何修改行为。
11.5修改或遮盖本产品程序、图象、动画、包装和手册等内容上的产品名称、公司标志、版权信息等内容。
11.6以本产品作为营业使用。
11.7其它违反著作权法、计算机软件保护条例和相关法规的行为。
对于违反上诉内容的行为,本产品的授权合同立即停止,并可能引起法律诉讼。
12. 法律适用
12.1 盛大网络及其原始授权人拥有《热血传奇》线上游戏相关的一切合法版权,受《中华人民共和国著作权法》的保护,任何侵害游戏公平性的事件均被视为针对该权利的违法行为,应按《中华人民共和国著作权法》第四十六、四十七条之规定承担相应法律责任。
12.2 本条款作为《用户服务条款》的补充性内容,是用户购买了游戏服务后,即构成的与盛大网络的合同关系的协议内容,受《中华人民共和国合同法》的保护,任何侵害游戏公平性的事件均被视为违反该协议的违法行为,应按《中华人民共和国合同法》第四章和第七章之规定承担相应法律责任。
12.3 任何侵害游戏公平性的事件还会被视为危及信息安全的行为,肇事人将可能违反中华人民共和国《计算机信息系统安全保护条例》第二十条、《计算机软件保护条例》第三十条、《计算机信息网络国际联网安全保护管理办法》第六条之规定,而 承担相应法律责任。
12.4 如侵害游戏公平性的行为系其它线上游戏相关企业所实施,或其雇佣或教唆他人实施,其行为亦被视为违反《中华人民共和国反不正当竞争法》,并承担相应法律责任。
13.修改和解释权:盛大网络有权对本协议中的有关条文内容做出解释或更正,本协议和用户服务条款及其他管理规定的最新版本会在游戏官方网站(mir2.sdo.com)上加以公布,用户对此表示接受并将切实遵守。
本《协议》受中华人民共和国法律管辖;本“软件产品”受著作权法及国际著作权条约和其它知识产权法和条约的保护;本“软件产品”只许可在给定范围和时间内使用,而不出售其原代码和其他任何相关知识产权权利。
Ⅳ ISO七层协议每一层对应的设备和各层相应的协议
OSI的7层从下到上分别是:
应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。
一、物理层:
1、传输协议:IEEE802.1A、IEEE802.2
2、传输单元:bit-flow比特流
3、主要功能设备/接口:光纤、双绞线、中继器和集线器 & RJ-45(网线接口)
二、数据链路层:
1、传输协议:ARP、MAC、FDDI、Ethernet、Arpanet、PPP、PDN
2、传输单元:frame帧
3、主要功能设备/接口:网桥、二层交换机
三、网络层:
1、传输协议:IP、ICMP、ARP、RARP
2、传输单元:数据包(packet)
3、主要功能设备/接口:路由器、三层交换机
四、传输层:
1、传输协议:TCP、UDP
2、传输单元:Segment/Datagram
3、主要功能设备/接口:四层交换机
五、会话层:
1、传输协议:SMTP、DNS
2、传输单元:报文
3、主要功能设备/接口:QoS
六、表示层:
1、传输协议:Telnet、SNMP
2、传输单元:报文
3、主要功能设备/接口:–
七、应用层:
1、传输协议:FTP、TFTP、Telnet、HTTP、DNS
2、传输单元:报文
3、主要功能设备/接口:–
(5)ios协议扩展阅读:
TCP是面向连接的,UDP是面向无连接的。TCP在通信之前必须通过三次握手机制与对方建立连接,而UDP通信不必与对方建立连接,不管对方的状态就直接把数据发送给对方
OSI七层模型是一个理论模型,实际应用则千变万化,因此更多把它作为分析、评判各种网络技术的依据;对大多数应用来说,只将它的协议族(即协议堆栈)与七层模型作大致的对应,看看实际用到的特定协议是属于七层中某个子层,还是包括了上下多层的功能。
tcp是流模式,udp是数据包模式。tcp只要不超过缓冲区的大小就可以连续发送数据到缓冲区上,接收端只要缓冲区上有数据就可以读取,可以一次读取多个数据包,而udp一次只能读取一个数据包,数据包之间独立。
顺序编号:tcp在传输文件的时候,会将文件拆分为多个tcp数据包,每个装满的数据包大小大约在1k左右,tcp协议为保证可靠传输,会将这些数据包顺序编号。
网络-网络七层协议
Ⅵ IOS7层协议是什么
是OSI七层协议吧。
OSI 七层模型称为开放式系统互联参考模型 OSI 七层模型是一种框架性的设计方法
OSI 七层模型通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯,因此其最主
要的功能使就是帮助不同类型的主机实现数据传输
物理层 : O S I 模型的最低层或第一层,该层包括物理连网媒介,如电缆连线连接器。物理层的协议产生并检测电压以便发送和接收携带数据的信号。在你的桌面P C 上插入网络接口卡,你就建立了计算机连网的基础。换言之,你提供了一个物理层。尽管物理层不提供纠错服务,但它能够设定数据传输速率并监测数据出错率。网络物理问题,如电线断开,将影响物理层。
数据链路层: O S I 模型的第二层,它控制网络层与物理层之间的通信。它的主要功能是如何在不可靠的物理线路上进行数据的可靠传递。为了保证传输,从网络层接收到的数据被分割成特定的可被物理层传输的帧。帧是用来移动数据的结构包,它不仅包括原始数据,还包括发送方和接收方的网络地址以及纠错和控制信息。其中的地址确定了帧将发送到何处,而纠错和控制信息则确保帧无差错到达。
数据链路层的功能独立于网络和它的节点和所采用的物理层类型,它也不关心是否正在运行 Wo r d 、E x c e l 或使用I n t e r n e t 。有一些连接设备,如交换机,由于它们要对帧解码并使用帧信息将数据发送到正确的接收方,所以它们是工作在数据链路层的。
网络层: O S I 模型的第三层,其主要功能是将网络地址翻译成对应的物理地址,并决定如何将数据从发送方路由到接收方。
网络层通过综合考虑发送优先权、网络拥塞程度、服务质量以及可选路由的花费来决定从一个网络中节点A 到另一个网络中节点B 的最佳路径。由于网络层处理路由,而路由器因为即连接网络各段,并智能指导数据传送,属于网络层。在网络中,“路由”是基于编址方案、使用模式以及可达性来指引数据的发送。
传输层: O S I 模型中最重要的一层。传输协议同时进行流量控制或是基于接收方可接收数据的快慢程度规定适当的发送速率。除此之外,传输层按照网络能处理的最大尺寸将较长的数据包进行强制分割。例如,以太网无法接收大于1 5 0 0 字节的数据包。发送方节点的传输层将数据分割成较小的数据片,同时对每一数据片安排一序列号,以便数据到达接收方节点的传输层时,能以正确的顺序重组。该过程即被称为排序。
工作在传输层的一种服务是 T C P / I P 协议套中的T C P (传输控制协议),另一项传输层服务是I P X / S P X 协议集的S P X (序列包交换)。
会话层: 负责在网络中的两节点之间建立和维持通信。 会话层的功能包括:建立通信链接,保持会话过程通信链接的畅通,同步两个节点之间的对 话,决定通信是否被中断以及通信中断时决定从何处重新发送。
你可能常常听到有人把会话层称作网络通信的“交通警察”。当通过拨号向你的 I S P (因特网服务提供商)请求连接到因特网时,I S P 服务器上的会话层向你与你的P C 客户机上的会话层进行协商连接。若你的电话线偶然从墙上插孔脱落时,你终端机上的会话层将检测到连接中断并重新发起连接。会话层通过决定节点通信的优先级和通信时间的长短来设置通信期限
表示层: 应用程序和网络之间的翻译官,在表示层,数据将按照网络能理解的方案进行格式化;这种格式化也因所使用网络的类型不同而不同。
表示层管理数据的解密与加密,如系统口令的处理。例如:在 Internet上查询你银行账户,使用的即是一种安全连接。你的账户数据在发送前被加密,在网络的另一端,表示层将对接收到的数据解密。除此之外,表示层协议还对图片和文件格式信息进行解码和编码。
应用层: 负责对软件提供接口以使程序能使用网络服务。术语“应用层”并不是指运行在网络上的某个特别应用程序 ,应用层提供的服务包括文件传输、文件管理以及电子邮件的信息处理。
Ⅶ iOS 协议问题
这不就指定了类型嘛,就和你写<VTDListViewInterface>这个一样,另外协议请用weak,避免循环引用
Ⅷ ios系统使用什么网络协议
iOS 7中使用了一种被称为多路TCP的全新网络协议。TCP是Transmission Control Protocol的简称,它是一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transport layer)通信协议,能够允许像iPhone或者iPad这样的设备同时使用多重接口,比如说同时使用蜂窝移动网络和WiFi进行数据传输。
Ⅸ ios中协议和委托(protocol、delegate)的使用方法
协议,类似于java或者c#语言中的接口,它限制了实现类必须拥有哪些方法。
它是对对象行为的定义,也是对功能的规范。
委托,委托是objective-c中使用非常频繁的一中设计模式,它的实现与协议的使用是分不开的。下面链接是一些示例:
http://blog.sina.com.cn/s/blog_71715bf80101b9od.html
Ⅹ iOS中协议和延展的区别
上面的答案有帮助吗?如果还有问题,请提出来,如果对答案满意,请顶一下,并标记为采纳答案,谢谢!