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对象赋值
 
 
 人要买电影票 Person
 App -> 百度糯米 美团 大众点评
 
 
 
 
 
 
 
 */


#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"]; 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2017-03-17 00:45  忆缘晨风  阅读(356)  评论(0)    收藏  举报