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(协议)/代理相关推荐

  1. protocol(协议)、delegate(代理)

    protocol(协议).delegate(代理) 一.protocol(协议) 1.概念:把多个类中的某些共同属性.方法抽象到一个类中,但这些属性.方法在不同的类中有不同的实现,相当于Java中的接 ...

  2. 设计模式之Protocol实现代理模式

    使用场合 使用步骤 不使用protocol实现代理 使用protocol实现代理 一.使用场合 A想让B帮忙,就让B代理 A想通知B发生了一些事情,或者传一些数据给B 观察者模式 二.使用步骤 定义一 ...

  3. 利用协议代理实现导航控制器UINavigationController视图之间的正向传值和反向传值...

    实验说明 (1)正向传值:比如A类里地值要传给B类用,就是我们先在A类中声明一个B类对象(当然B类头文件要import过来),然后把A类中得某个 值传递给B类中得某个值(所以需要在B类中先准备一个变量 ...

  4. 网络协议(三) HTTP协议

    网络协议(三) HTTP协议 1. HTTP协议简介 2. HTTP协议基础 2.1 TCP/IP协议 5. HTTP协议 5.1 HTTP简介 5.2 HTTPS 简介 5.3 HTTPS 和HTT ...

  5. 【转】iOS开发-Protocol协议及委托代理(Delegate)传值

    原文网址:http://www.cnblogs.com/GarveyCalvin/p/4210828.html 前言:因为Object-C是不支持多继承的,所以很多时候都是用Protocol(协议)来 ...

  6. iOS开发-Protocol协议及委托代理(Delegate)传值

    前言:因为Object-C是不支持多继承的,所以很多时候都是用Protocol(协议)来代替.Protocol(协议)只能定义公用的一套接口,但不能提供具体的实现方法.也就是说,它只告诉你要做什么,但 ...

  7. Linux内核网络数据包发送(三)——IP协议层分析

    Linux内核网络数据包发送(三)--IP协议层分析 1. 前言 2. `ip_send_skb` 3. `ip_local_out` and `__ip_local_out` 3.1 netfilt ...

  8. 脑残式网络编程入门(三):HTTP协议必知必会的一些知识

    为什么80%的码农都做不了架构师?>>>    本文原作者:"竹千代",原文由"玉刚说"写作平台提供写作赞助,原文版权归"玉刚说&q ...

  9. JavaWeb --第三章 HTTP协议详解

    JavaWeb --第三章 HTTP协议详解 Http 什么是HTTP HTTP: 超文本传输协议(Hypertext Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常 ...

最新文章

  1. 使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数。请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?”。...
  2. Linux du命令和df命令区别
  3. BZOJ 1565 Luogu P2805 [NOI2009]植物大战僵尸 (Tarjan判环、最小割)
  4. MapReduce原理与设计思想(转载:http://blog.jobbole.com/80619/)
  5. OOB套接字传输实例(达不到预期结果)
  6. (IOS)截图Demo
  7. ROS笔记(39) 串口配置
  8. mac的python怎么输入中文_无法在python IDE(Mac OS X)中输入unicode
  9. SVN 冲突文件详解
  10. 极验滑动验证码破解分析
  11. Springboot监控之二:Spring Boot Admin对Springboot服务进行监控
  12. 相亲交友小程序的盈利点
  13. 想搭建一个手游平台怎么做?需要了解哪些细节?
  14. mysql orderby asc_MySQL 数据排序 order by
  15. 一级化学反应多步骤Fluent仿真文献复现(三维、多孔介质催化剂表面反应)
  16. Java培训,看这一篇就够了
  17. NOIP2018 tg游记
  18. js charCodeAt, fromCharCode 字符与Unicode编码转换
  19. 驭势科技无人配送车深入上海、广州多地抗疫一线
  20. 树的前序,中序,后序的相互转换

热门文章

  1. ASEMI整流桥KBP410参数,KBP410厂家,KBP410货源
  2. 认认真真推荐9个高质量公众号
  3. check mk 监控 oracle
  4. 生物老师(搞笑)鼻子和手
  5. MySQL——创建数据库和数据表
  6. 稳定性全系列(二)——如何做线上全链路压测
  7. 目标检测与位姿估计(五):A Survey: Visual Place Recognition
  8. 类的定义,成员函数和内置成员函数
  9. JavaScript学习笔记 06、DOM元素—③定时器与延时器
  10. SharpDevelop 简介