zoukankan      html  css  js  c++  java
  • 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名字(参数)
     ---------
                 《未完待续》
  • 相关阅读:
    python基础—函数装饰器
    python基础—函数嵌套与闭包
    Python之三级菜单
    Python之运算符
    Python之字典
    Python之购物车
    Python之列表
    Python之布尔
    Python之“Hello World”
    Python之递归函数
  • 原文地址:https://www.cnblogs.com/Biaoac/p/5240115.html
Copyright © 2011-2022 走看看