IOS开发之基础知识点回顾大纲

1、数组字典
2、协议 拷贝  归档
3、类目 继承 延展
4、代理
5、block
6、通知 KVC  KVO
7、方法 setter getter
8、日期类
9、sqlite
10、uiview 图层关系
11、label imageview uiview动画
12、uicontrol:button selider segment
13、uicontrol:textfield uiswitch
14、弹出框 等待视图
15、手势
16、滚动视图:scrollview
17、tableview
18、textview
19、webview
20、导航控制器 分栏控制器
21、MVC
22、bmob
 
 
 
协议:制定一个共同遵守的条约   可以不遵守协议 如果遵守了->也可以不去落实
 Protocol:协议 制定共同实现的方法 (如果不实现会警告 但不会崩溃)
定义一个协议:
 1、协议只有声明文件 只需要告诉人 要遵守什么方法 并不需要指定 具体怎么去实现
 2、协议有强制执行(required)和选择执行(optional) 默认的是强制执行
 声明协议的步骤:
 1、创建声明协议 command+n ->Objective-c file
 ->选择protocol
 @protocol 协议名 <NSObject>
 @end
 2、声明协议的方法(只要遵守协议的类 都可以使用这个接口)
 声明协议的方法有两种 权限
 (1)强制执行@required 默认的
 (2)选择执行@optional 
 3、遵守协议实现协议的步骤:
 1、导入协议的名字 #import "协议名".h
 2、@interface 类名:父类名 <协议的名字>
 3、实现协议里面的方法
 
 
 
#import <Foundation/Foundation.h>
 
//公式:@protocol 协议名 <NSObject>
@protocol RGLight <NSObject>
 
@required//默认的强制执行
- (void)redLight;
- (void)greenLight;
//强制执行的协议方法 遵守协议的类 如果没有实现 就会警告提示
 
@optional//选择执行
- (void)yellowLight;
 
//启动基本完成程序准备开始运行
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
 
    NSLog(@"%s %d",__FUNCTION__,__LINE__);
    [self.window makeKeyAndVisible];
 
    Button *button = [[Button alloc] initWithFrame:CGRectMake(100, 100, 100,                                                             100)];
//    使用协议的方法
    [button setViewColor:[UIColor redColor]];
    [self.window addSubview:button];
 
 
    View *view = [[View alloc] initWithFrame:CGRectMake(100, 200, 100, 100)];
//    使用协议的方法
    [view setViewColor:[UIColor orangeColor]];
    [self.window addSubview:view];
    return YES;
}
//当应用程序将要入非活动状态执行
//进入非活动状态的条件
//1、来电话
//2、HOME键
 
拷贝:赋值一个对象会变成另外一个对象。
 
深拷贝:复制对象,并且复制对象里面的内容,完全拷贝。
浅拷贝:指针拷贝,只拷贝对象,不拷贝对象里面的内容。
 
copy
mutableCopy 系统自带的都属于浅拷贝
 
实现深拷贝的方法
1、可以自定义拷贝(根据具体拷贝内容的实现)
2、系统提供给了深拷贝的构造方法
(1)数组 -( instancetype)initWithArray:(NSArray<ObjectType>)array  copyItems:(BOOL)flag
  (2)字典 -( instancetype)initWithDictionary:(NSDictionary<KeyType,ObjectType>)otherDictionary copyItems:(BOOL)flag
 
自定义拷贝
1、copyWithZone:
2、mutableCopyWithZone
 
- (id)copyWithZone:(nullable NSZone *)zone{
 
//    allocWithZone在执行copy的时候分配内存
//    new是拷贝之后新的对象
    UserInfoModel *new = [[UserInfoModel allocWithZone:zone] init];
 
    new.list = [self.list copy];
    new.info = [self.info copy];
    return new;
}
 
 
 
- (id)mutableCopyWithZone:(nullable NSZone *)zone{
    UserInfoModel *new = [[UserInfoModel allocWithZone:zone] init];
 
    new.list = [self.list mutableCopy];
    new.info = [self.info mutableCopy];
    return new;
}
 
 
 
 
归档分为存储数据(编码的过程、或叫序列化的过程、或归档过程)。
 读取数据(解码、反序列化、解归档)。
 
归档:NSCoding
 除了NSObject未实现归档协议,其他实现了协议的类都可以归档(UIView、UIViewController、UIImage...)
 
归档的类名:NSKeyedArchiver
 解归档类名:NSKeyedUnarchiver
 
// 归档的步骤
//1、写归档存储文件的路径
//2、准备要归档的数据
//3、开始归档
 
//1、写归档存储文件的路径
    NSArray *serchList = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
//    归档文件的尾缀尽量.archiver
    NSString *path = [[serchList lastObject] stringByAppendingPathComponent:@"list.archiver"];
 
    //2、准备要归档的数据
   NSArray *list = @[@{@"name":@"奈何",@"age":@180,@"height":@180}];
    //3、开始归档
//    + (BOOL)archiveRootObject:(id)rootObject toFile:(NSString *)path;
//    把一个支持object(支持归档)类型的数据,以归档的形式存储到指定位置
//    支持归档协议的对象,系统帮忙对他进行了编码
    BOOL isSuccess = [NSKeyedArchiver archiveRootObject:list toFile:path];
    if (isSuccess) {
        NSLog(@"%@",path);
    }
 
 解归档的步骤
//    1、归档文件的路径
//    2、开始解归档
    //    1、归档文件的路径
    NSArray *serchList = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
    //    归档文件的尾缀尽量.archiver
    NSString *path = [[serchList lastObject] stringByAppendingPathComponent:@"list.archiver"];
    //    2、开始解归档
   NSArray *list = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
    NSLog(@"%@",list);
//    NSDictionary *dic = @{@"name":@"..."};归档到字典
 
归档多种数据
 1、存储路径
 2、初始化一个可变的二进制对象,同时准备要归档的数据
 3、归档等待写入数据的二进制对象(要使用归档的数据,对需要的归档的数据进行编码)
 4、使用归档对象,对要归档的数据进行编码(编码结束后同时写入到二进制对象)
 5、编码结束(把编码后的数据写入到二进制数据《系统操作》现在二进制对象里面已经存在编码之后的数据
 )
 6、把二进制对象存储到指定位置(归档成功)
 
 1、存储路径
    NSArray *searchList = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *path = [[searchList lastObject] stringByAppendingPathComponent:@"user. archiver"];
 
//   2、 初始化一个可变的二进制对象,同时准备要归档的数据
    //    准备要归档的数据
    NSString *name = @"肖耐";
    NSInteger age = 18;
    float height = 180;
//    初始化一个可变的二进制对象
    NSMutableData *data = [NSMutableData data];
//    3、归档等待写入数据的二进制对象
//  - (instancetype)initForWritingWithMutableData:(NSMutableData *)data
//    二进制文件等待写入->让归档对象帮他写入(编码结束,就会把编码后的数据,写入到二进制对象)
    NSKeyedArchiver *arc = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
//     4、使用归档对象,对要归档的数据进行编码(同是写入到二进制对象)
//    编码使用encode,解码使用decode
//    要用对应的数据类型进行编码
    [arc encodeObject:name forKey:@"name"];
    [arc encodeInteger:age forKey:@"age"];
    [arc encodeFloat:height forKey:@"height"];
//    5、编码结束。编码结束之后,会把编码之后的数据写入到二进制对象
    [arc finishEncoding];
//     6、把二进制对象存储到指定位置(归档成功)
 
   BOOL isSuccess =  [data writeToFile:path atomically:YES];
    if (isSuccess) {
        NSLog(@"归档路径=%@",path);
    }
 
多重数据存到同一个归档文件解归档
//    1、归档文件的路径
//    2、使用data 读取数据准备解归档data里面的数据
//    3、解归档数据,用对应的数据类型接收
 
 - (instancetype)initForReadingWithData:(NSData *)data;
//    NSData *readData = [[NSData dataWithContentsOfFile:path];
//    2、使用data 读取数据准备解归档data里面的数据
    NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:[NSData dataWithContentsOfFile:path]];
// 3、解归档数据,用对应的数据类型接收
    NSString *name = [unarchiver decodeObjectForKey:@"name"];
    NSInteger age = [unarchiver decodeIntegerForKey:@"age"];
    float height = [unarchiver decodeFloatForKey:@"height"];
 
 -------------------------------
 类目:category
 对一个类《原有类》 方法的扩展
 1.命名规则:类名+类目的名称(要扩展的哪一个方向)
 2.?使用:
 1).开发便利 可以不互相影响
 2).扩展系统类里面的方法 ——-》oc是不开源的不能修改原有类的方法实现
 3.调用  使用原有类去调用(类方法《原有类的类名调用》)(对象方法《原有类的对象调用》)
 4.创建一个类目-》客忙得+恩---object-c file ----category----第一个输入内容:类目的名字  第二个输入的内容:要扩展的类
 
 ********类目只能添加方法,不允许添加变量
 
 [UIImage imageNamed:@""]会把图片直接缓存到内存  占用运行时的内存(不超过30M)一般使用来添加图标
 
 通过文件的路径去读取图片 不会直接加载到内存-》
 [UIImage imageWithContentsOfFile:图片路径]
 
----------------------------------
 延展:给类声明私有方法和变量 在。m文件里面添加一个私有的接口文件(@interface 类名()@end)
    Extension 给类声明一个私有的方法和变量
 
 */2、继承
 子类 父类(超级类)
 父类有的方法 子类可以用
 父类有的属性 子类可以使用
 父类所有公开的方法属性 子类可以使用
 子类独有的方法属性 父类不能使用。
 
代理使用步骤:
 前三步 是写在 给别人值(帮别人做事)第二个页面
 1、声明代理方法
 2、声明属性接口
 3、确定什么时候触发代理
 
 后三步 写在接收数据的那  第一个页面
 4、导入类名 代理名
 5、挂上代理 (*****是否能 调用代理方法)
 6、实现代理方法
 
/*
 block 代码块 闭包(一个封闭的区域) 与语言函数相同
 
 block 具有反向传值的,回调的功能
 回调:执行完之后返回再去执行
 在回调的时候 给他一个值
 
 他分为声明实现,和调用两部分
 
 声明 声明一个block 会执行
 实现 实现一个block 不调用 不执行
 调用 调用block 返回去执行 实现部分
 
 1.block的声明
 2.分析回调,反向传值
 3.当作变量使用
 4.当作参数适用
 5.当作属性使用  解决block 的内存循环引用
 6.代替代理
 
 
block的公式
 1。声明实现写到一块的公式
 返回值类型(^block名字)(参数列表 参数类型 参数名)=^(参数列表){
    <#实现代码#>
 }
   调用  block名字(参数)
 
 2.声明实现分开的部分
  (1)声明
  返回值类型(^block)名字(参数列表);
  (2)实现
 block名字 =^(参数列表){
 <#实现代码#>
 }
  (3)调用
  block名字(参数)
 ---------
             《未完待续》
原文地址:https://www.cnblogs.com/Biaoac/p/5240115.html