zoukankan      html  css  js  c++  java
  • Objective-C加强3Foundation框架

    NSDictionary
      什么是NSDictionary
      NSDictionary翻译过来叫做”字典
      日常生活中, “字典”的作用: 通过一个拼音或者汉字, 就能找到对应的详细解释
      NSDictionary的作用类似: 通过一个key, 就能找到对应的value
      NSDictionary不可变的, 一旦初始化完毕, 里面的内容就无法修改

      NSDictionary的创建
        + (instancetype)dictionary;
        + (instancetype)dictionaryWithObject:(id)object forKey:(id <NSCopying>)key;
        + (instancetype)dictionaryWithObjectsAndKeys:(id)firstObject, ...;
        + (id)dictionaryWithContentsOfFile:(NSString *)path;
        + (id)dictionaryWithContentsOfURL:(NSURL *)url;

    NSDictionary的常见使用
      - (NSUInteger)count;    
        返回字典的键值对数目

      - (id)objectForKey:(id)aKey;
        根据key取出value

      将字典写入文件中
      - (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;
      - (BOOL)writeToURL:(NSURL *)url atomically:(BOOL)atomically;

    NSDictionary的遍历
      快速遍历
      for (NSString *key in dict) { }

      Block遍历
      [dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
        
      }];

    NSDictionary的简写
      NSDictionary的创建
        以前
        [NSDictionary dictionaryWithObjectsAndKeys:@"Jack", @"name", @"男", @"sex", nil];

        现在
        @{@"name": @"Jack", @"sex" : @"男”};

      NSDictionary获取元素
        以前
        [dict objectForKey:@"name”];

        现在
        dict[@"name”];

    NSMutableDictionary
      什么是NSMutableDictionary
      NSMutableDictionaryNSDictionary的子类
      NSDictionary不可变的, 一旦初始化完毕后, 它里面的内容就永远是固定的, 不能删除里面的元素, 也不能再往里面添加元素
      NSMutableDictionary可变的, 随时可以往里面添加更改删除元素

    NSMutableDictionary的常见操作
      - (void)setObject:(id)anObject forKey:(id <NSCopying>)aKey;
        添加一个键值对(会把aKey之前对应的值给替换掉)

      - (void)removeObjectForKey:(id)aKey;
        通过aKey删除对应的value

      - (void)removeAllObjects;
        删除所有的键值对

    NSMutableDictionary的简写
      设置键值对
      以前
      [dict setObject:@"Jack" forKey:@"name”];

      现在
      dict[@"name"] = @"Jack";


    NSFileManager
      什么是NSFileManager
      顾名思义, NSFileManager是用来管理文件系统
      它可以用来进行常见的文件文件夹操作

      NSFileManager使用了单例模式

      使用defaultManager方法可以获得那个单例对象
      [NSFileManager defaultManager]

    NSFileManager的常见判断
      - (BOOL)fileExistsAtPath:(NSString *)path;
        path这个文件文件夹是否存在

      - (BOOL)fileExistsAtPath:(NSString *)path isDirectory:(BOOL *)isDirectory;
        path这个文件文件夹是否存在, isDirectory代表是否为文件夹

      - (BOOL)isReadableFileAtPath:(NSString *)path;
        path这个文件文件夹是否可读

      - (BOOL)isWritableFileAtPath:(NSString *)path;
        path这个文件文件夹是否可写

      - (BOOL)isDeletableFileAtPath:(NSString *)path;
        path这个文件文件夹是否可删除

    NSFileManager的文件访问
      - (NSDictionary *)attributesOfItemAtPath:(NSString *)path error:(NSError **)error;
        获得path这个文件文件夹的属性

      - (NSArray *)subpathsAtPath:(NSString *)path;
      - (NSArray *)subpathsOfDirectoryAtPath:(NSString *)path error:(NSError **)error;
        获得path的所有子路径

      - (NSArray *)contentsOfDirectoryAtPath:(NSString *)path error:(NSError **)error;
        获得path的当前子路径

      - (NSData *)contentsAtPath:(NSString *)path;
        获得文件内容

    NSFileManager的文件操作
      - (BOOL)copyItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error;
      拷贝
      - (BOOL)moveItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error;
      移动(剪切)
      - (BOOL)removeItemAtPath:(NSString *)path error:(NSError **)error;
      删除
      - (BOOL)createDirectoryAtPath:(NSString *)path withIntermediateDirectories:(BOOL)createIntermediates attributes:(NSDictionary *)attributes error:(NSError **)error;
      创建文件夹(createIntermediates为YES代表自动创建中间的文件夹)

      - (BOOL)createFileAtPath:(NSString *)path contents:(NSData *)data attributes:(NSDictionary *)attr;
      创建文件
      (NSData是用来存储二进制字节数据的)

    文件下载的简单思路

    NSPointCGPoint
      CGPoint和NSPoint是同义的
      typedef CGPoint NSPoint;

      CGPoint的定义
        struct CGPoint {
          CGFloat x;
          CGFloat y;
        };
      typedef struct CGPoint CGPoint;
      typedef double CGFloat;

      CGPoint代表的是二维平面中的一个点
      可以使用CGPointMakeNSMakePoint函数创建CGPoint

    NSSizeCGSize
      CGSize和NSSize是同义的
      typedef CGSize NSSize;

      CGSize的定义
        struct CGSize {
           CGFloat width;
           CGFloat height;
             };
      typedef struct CGSize CGSize;

      CGSize代表的是二维平面中的某个物体的尺寸(宽度和高度)
      可以使用CGSizeMakeNSMakeSize函数创建CGSize

    NSRectCGRect
      CGRect和NSRect是同义的
      typedef CGRect NSRect;

      CGRect的定义
        struct CGRect {
            CGPoint origin;
            CGSize size;
        };
      typedef struct CGRect CGRect;

      CGRect代表的是二维平面中的某个物体的位置和尺寸
      可以使用CGRectMake和NSMakeRect函数创建CGRect

    NSNumber
      NSArrayNSDictionary中只能存放OC对象, 不能存放intfloatdouble等基本数据类

      如果真想把基本数据(比如int)放进数组或字典中, 需要先将基本数据类型包装成OC对象

      

    NSNumber的创建
      以前
        + (NSNumber *)numberWithInt:(int)value;
        + (NSNumber *)numberWithDouble:(double)value;
        + (NSNumber *)numberWithBool:(BOOL)value;

      现在
        @10;
        @10.5;
        @YES;
        @(num);

    NSNumber的常用方法
      从NSNumber中取出之前包装的基本数据类型
        - (char)charValue;
        - (int)intValue;
        - (long)longValue;
        - (double)doubleValue;
        - (BOOL)boolValue;
        - (NSString *)stringValue;

      - (NSComparisonResult)compare:(NSNumber *)otherNumber;
      - (BOOL)isEqualToNumber:(NSNumber *)number;

    NSValue
      NSNumberNSValue的子类, 但NSNumber只能包装数字类型

      NSValue可以包装任意值

      因此, 可以用NSValue将结构体包装后, 加入NSArrayNSDictionary中


    常见结构体的包装
      为了方便 结构体NSValue 的转换, Foundation提供了以下方法
      将结构体包装成NSValue对象
        + (NSValue *)valueWithPoint:(NSPoint)point;
        + (NSValue *)valueWithSize:(NSSize)size;
        + (NSValue *)valueWithRect:(NSRect)rect;

      从NSValue对象取出之前包装的结构体
        - (NSPoint)pointValue;
        - (NSSize)sizeValue;
        - (NSRect)rectValue;

    任意数据的包装
      NSValue提供了下列方法来包装任意数据
      + (NSValue *)valueWithBytes:(const void *)value objCType:(const char *)type;
        value参数 : 所包装数据的地址
        type参数 : 用来描述这个数据类型的字符串, 用@encode指令来生成

      从NSValue中取出所包装的数据
      - (void)getValue:(void *)value;

    NSDate
      NSDate可以用来表示时间, 可以进行一些常见的日期时间处理

      一个NSDate对象就代表一个时间

      [NSDate date]返回的就是当前时间

    NSDate日期格式化
      NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
      formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";

      // 将NSString转换为NSDate
      NSDate *date = [formatter dateFromString:@"2010-03-24 00:00:00"];

      // 将NSDate转换为NSString
      NSLog(@"%@", [formatter stringFromDate:date]);

    NSCalendar
      结合NSCalendarNSDate能做更多的日期时间处理

      获得NSCalendar对象
      NSCalendar *calendar = [NSCalendar currentCalendar];

      获得年月日
      - (NSDateComponents *)components:(NSCalendarUnit)unitFlags fromDate:(NSDate *)date;

      比较两个日期的差距
      - (NSDateComponents *)components:(NSCalendarUnit)unitFlags fromDate:(NSDate *)startingDate

                       toDate:(NSDate *)resultDate options:(NSCalendarOptions)opts;

    NSObject
      NSObject可以是所有类的基类, 内部定义了很多常用的方法


      - (BOOL)isKindOfClass:(Class)aClass;
        判断是否为aClass或者aClass的子类的实例

      - (BOOL)isMemberOfClass:(Class)aClass
        判断是否为aClass的实例(不包括aClass的子类)

      - (BOOL)conformsToProtocol:(Protocol *)aProtocol
        判断对象是否实现了aProtocol协议

      - (BOOL)respondsToSelector:(SEL)aSelector
        判断对象是否拥有参数提供的方法

      - (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay;
        延迟调用参数提供的方法,方法所需参数用withObject传入

    NSString的其他使用场合


      通过类名的字符串形式实例化对象
        Class class = NSClassFromString(@"Student");
        Student *stu = [[class alloc] init];

      将类名变成字符串
        Class class = [Student class];
        NSString *className = NSStringFromClass(class);

      通过方法的字符串形式实例化方法
        SEL selector = NSSelectorFromString(@"setName:");
        [stu performSelector:selector withObject:@"Mike"];

      将方法变成字符串
      NSStringFromSelector(@selector(setName:));


    集合的内存管理
      集合,就是能用来容纳OC对象的容器
      NSArray、NSDictionary等都是

      集合有一些内存管理细节
      只要将一个对象添加到集合中,这个对象计数器就会 + 1(做一次retain操作)
      只要将一个对象从集合中移除,这个对象计数器就会 - 1(做一次release操作)
      如果集合被销毁了,集合里面的所有对象计数器都会 - 1(做一次release操作)



    本人无商业用途,仅仅是学习做个笔记,特别鸣谢小马哥,学习了IOS,另日语学习内容有需要文本和音频请关注公众号:riyuxuexishuji
  • 相关阅读:
    postcss-pxtorem
    git命令记录
    伪类和伪元素
    JavaScript设计模式
    每日思考(2020/09/08)
    每日思考(2020/09/03)
    每日思考(2020/09/02)
    每日思考(2020/09/01)
    每日思考(2020/08/31)
    每日思考(2020/08/27)
  • 原文地址:https://www.cnblogs.com/laugh/p/6370679.html
Copyright © 2011-2022 走看看