OC加强(三)之protocol(协议)/代理
1.protocol概念以及基本使用
1、protocol的使用注意
OC中的协议(protocol)使用注意:
1)Protocol:就一个用途,用来声明一大堆的方法(不能声明成员变量),不能写实现。
2)只要某个类遵守了这个协议,就拥有了这个协议中的所有方法声明 。
3)只要父类遵守了某个协议,那么子类也遵守。
4)Protocol声明的方法可以让任何类去实现,protocol就是协议。
5)OC不能继承多个类(单继承)但是能够遵守多个协议 继承(:),遵守协议(< >)
6)基协议:<NSObject>是基协议,是最根本最基本的协议,其中声明了很多最基本的方法。
7)协议可以遵守协议,一个协议遵守了另一个协议,就可以拥有另一份协议中的方法声明
2、id和instancetype的区别
id和instancetype的区别
1)instancetype只能作为函数或者方法的返回值
2)id能作为方法或者函数的返回值、参数类型,也能用来定义变量
3)instancetype对比id的好处
* 能精确地限制返回值的具体类型
3.protocol代理设计模式
代理是一个很神奇的东西,什么意思呢?就是代替别人做事儿,俗称佣人,跟协议密切相关
假设学生想租房子住,但自己又不能直接和租户有联系,因为没有租户信息,那么就只能找中介来帮忙找房子了
中介就是一个代理对象,就是中介你去给我找房子吧,找来我付钱住就行了
这个时候找房子就是一个协议,
// // findHouse.h // OC9-block和协议 // // Created by IOSBasic_7 on 15/10/22. // Copyright © 2015年 itheima. All rights reserved. // #import <Foundation/Foundation.h>@protocol findHouse <NSObject> -(void)findHouse; @end
// // Student.h // OC9-block和协议 // // Created by IOSBasic_7 on 15/10/22. // Copyright © 2015年 itheima. All rights reserved. // #import <Foundation/Foundation.h> #import "findHouse.h" @interface Student : NSObject -(void)goHome;//委托中介帮忙找房子 //给delegate赋值的对象,必须要遵守 findHouse 协议 @property id<findHouse> delegate; @end
// // Student.m // OC9-block和协议 // // Created by IOSBasic_7 on 15/10/22. // Copyright © 2015年 itheima. All rights reserved. // #import "Student.h"@implementation Student -(void)goHome{//中介帮他找房子// WAWJ[self.delegate findHouse]; } @end
// // LinkHome.h // OC9-block和协议 // // Created by IOSBasic_7 on 15/10/22. // Copyright © 2015年 itheima. All rights reserved. // #import <Foundation/Foundation.h> #import "findHouse.h" @interface LinkHome : NSObject<findHouse>@end
// // LinkHome.m // OC9-block和协议 // // Created by IOSBasic_7 on 15/10/22. // Copyright © 2015年 itheima. All rights reserved. // #import "LinkHome.h"@implementation LinkHome -(void)findHouse{NSLog(@"链家正在帮着找房子");} @end
/*代理模式设计思路:1,先定义一个协议2,定义一个代理的类,遵守这个协议3,在需要代理的类中,定义实例变量 id<协议> delegate;4,在需要代理的类中,需要有行为,去启动代理5,在使用代理的时候,给需要代理的类的delegate对象赋值人要买电影票 PersonApp -> 百度糯米 美团 大众点评*/#import <Foundation/Foundation.h> #import "Student.h" #import "LinkHome.h" #import "WAWJ.h" int main(int argc, const char * argv[]) {@autoreleasepool {Student *stu = [Student new];LinkHome *lh = [LinkHome new];WAWJ *wj = [WAWJ new];//给学生一个代理对象stu.delegate = wj;[stu goHome];}return 0; }
2.NSString介绍及基本使用
什么是NSString?
NSString其实就是一个类名而已,是用来定义字符串变量的,所以又称为字符串类
定义字符串的方式:
1)第一种方式:最直接的方式
NSString *str = @"abc";
此时:str存储在栈区,abc存储在常量区
2)第二种方式:格式化的方式
//2,格式化的创建// Xcode6 iOS8 的时候NSString *str1 = [NSString stringWithFormat:@"我一贱你就笑!,%d",520];
此时:str1存储在栈区,字符串"我一贱你就笑"存储在堆区
3)第三种方式:从文件中读取
如何把字符串保存到文件中? // [str1 writeToFile:文件路径及名称 atomically:YES/NO 是否要线程安全 encoding:字符串的编码格式 error:存储错误信息的对象]//NSError 用于处理错误的类NSError *err;//写入字符串到文件中//NSUTF8StringEncoding utf-8的编码格式BOOL isYes = [str1 writeToFile:@"/Users/jeff_mao/Desktop/str.txt" atomically:NO encoding:NSUTF8StringEncoding error:&err];if (isYes) {NSLog(@"写入成功");}
4,如何从文件中再把字符串读取出来// [NSString stringWithContentsOfFile:路径 encoding:编码格式 error:错误信息] NSString *readStr = [NSString stringWithContentsOfFile:@"/Users/jeff_mao/Desktop/str.txt" encoding:NSUTF8StringEncoding error:nil];NSLog(@"readStr = %@",readStr);
3.使用NSURL读写字符串
1)
什么是URL?
URL的全称是Uniform Resource Locator(统一资源定位符) URL是互联网上标准资源的地址 互联网上的每个资源都有一个唯一的URL,它包含的信息指出资源的位置 根据一个URL就能找到唯一的一个资源
// urlWithString:@"sms://110"
传入完整的字符串创建
NSURL *url = [NSURL URLWithString:@"file:///Users/apple/Desktop/str.txt"]; 通过文件路径创建(默认就是file协议的)
NSURL *url = [NSURL fileURLWithPath:@"/Users/apple/Desktop/str.txt"];
转载于:https://www.cnblogs.com/yiyuanchenfeng/p/6562423.html
OC加强(三)之protocol(协议)/代理相关推荐
- protocol(协议)、delegate(代理)
protocol(协议).delegate(代理) 一.protocol(协议) 1.概念:把多个类中的某些共同属性.方法抽象到一个类中,但这些属性.方法在不同的类中有不同的实现,相当于Java中的接 ...
- 设计模式之Protocol实现代理模式
使用场合 使用步骤 不使用protocol实现代理 使用protocol实现代理 一.使用场合 A想让B帮忙,就让B代理 A想通知B发生了一些事情,或者传一些数据给B 观察者模式 二.使用步骤 定义一 ...
- 利用协议代理实现导航控制器UINavigationController视图之间的正向传值和反向传值...
实验说明 (1)正向传值:比如A类里地值要传给B类用,就是我们先在A类中声明一个B类对象(当然B类头文件要import过来),然后把A类中得某个 值传递给B类中得某个值(所以需要在B类中先准备一个变量 ...
- 网络协议(三) HTTP协议
网络协议(三) HTTP协议 1. HTTP协议简介 2. HTTP协议基础 2.1 TCP/IP协议 5. HTTP协议 5.1 HTTP简介 5.2 HTTPS 简介 5.3 HTTPS 和HTT ...
- 【转】iOS开发-Protocol协议及委托代理(Delegate)传值
原文网址:http://www.cnblogs.com/GarveyCalvin/p/4210828.html 前言:因为Object-C是不支持多继承的,所以很多时候都是用Protocol(协议)来 ...
- iOS开发-Protocol协议及委托代理(Delegate)传值
前言:因为Object-C是不支持多继承的,所以很多时候都是用Protocol(协议)来代替.Protocol(协议)只能定义公用的一套接口,但不能提供具体的实现方法.也就是说,它只告诉你要做什么,但 ...
- Linux内核网络数据包发送(三)——IP协议层分析
Linux内核网络数据包发送(三)--IP协议层分析 1. 前言 2. `ip_send_skb` 3. `ip_local_out` and `__ip_local_out` 3.1 netfilt ...
- 脑残式网络编程入门(三):HTTP协议必知必会的一些知识
为什么80%的码农都做不了架构师?>>> 本文原作者:"竹千代",原文由"玉刚说"写作平台提供写作赞助,原文版权归"玉刚说&q ...
- JavaWeb --第三章 HTTP协议详解
JavaWeb --第三章 HTTP协议详解 Http 什么是HTTP HTTP: 超文本传输协议(Hypertext Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常 ...
最新文章
- 使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数。请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?”。...
- Linux du命令和df命令区别
- BZOJ 1565 Luogu P2805 [NOI2009]植物大战僵尸 (Tarjan判环、最小割)
- MapReduce原理与设计思想(转载:http://blog.jobbole.com/80619/)
- OOB套接字传输实例(达不到预期结果)
- (IOS)截图Demo
- ROS笔记(39) 串口配置
- mac的python怎么输入中文_无法在python IDE(Mac OS X)中输入unicode
- SVN 冲突文件详解
- 极验滑动验证码破解分析
- Springboot监控之二:Spring Boot Admin对Springboot服务进行监控
- 相亲交友小程序的盈利点
- 想搭建一个手游平台怎么做?需要了解哪些细节?
- mysql orderby asc_MySQL 数据排序 order by
- 一级化学反应多步骤Fluent仿真文献复现(三维、多孔介质催化剂表面反应)
- Java培训,看这一篇就够了
- NOIP2018 tg游记
- js charCodeAt, fromCharCode 字符与Unicode编码转换
- 驭势科技无人配送车深入上海、广州多地抗疫一线
- 树的前序,中序,后序的相互转换