美文网首页
【GeekBand】Week2. 笔记整理

【GeekBand】Week2. 笔记整理

作者: 喵小扣 | 来源:发表于2016-03-14 04:31 被阅读0次

    1. 【OC/2-1】字符串处理

    • NSString(具有恒定性及共享机制)
      NSMutableString(可变)
    • 初始化
    NSString *str = @"Hello World!";
    NSString *str = [[NSString alloc]initWithCString:"Hello World!"
                                              encoding:NSUTF8StringEncoding];
    NSString *str = [NSString stringWithCString:"Hello World!"
                                         encoding:NSUTF8StringEncoding];
    NSMutableString *mustr = [NSMutableString stringWithCapacity:100];
    
    • 字符串长度
    str.length
    [str length]
    
    • 判断相等
    str1 isEqualToString: str2 //指针指向的【字符串】是否相等
    str1 == str2 //【指针】是否指向同一对象,【引用】是否相等
    
    • 返回字符串中第 i 个字符
    [str characterAtIndex: i]
    
    • 大小写
    str = str.uppercaseString; //大写
    str = str.lowercaseString; //小写
    str = str.capitalizedString; //首字母大写
    
    • 在str1中查找str2是否存在
    /**********
    typedef struct _NSRange {  
          unsigned int location; //范围起始位置
          unsigned int length; //范围内所含元素的个数
    }NSRange;
    **********/
    if ([str1 rangeOfString:str].location != NSNotFound) {  
          //找到了
    }
    /*
    NSRange range = [str1 rangeOfString:@"Hello"];
    range.location
    range.length
    */
    
    • 截取子串
    substringToIndex //从第一个字符串开始截取,到指定长度位置,但是不包括该指定位置位置字符串
    substringFromIndex //从指定位置开始截取字符串到最后,所截取位置包含该指定位置
    substringWithRange //传入NSRange类型,表示从哪里开始截取和长度,返回字符串类型。
    
    • 判断前缀是否存在
    hasPrefix
    
    • 格式化(?)
    NSString* format = [NSString stringWithFormat: @"[%d, %d]", 100, 200];
    
    • NSMutableString的增删改查方法
    [mustr3 appendString:@"Hello Objective"];
    [mustr3 insertString:@"-C" atIndex:mustr3.length];
    [mustr3 setString:@"Hi Objective"];
    NSRange replaceRange = NSMakeRange(0, 2);
    [mustr3 replaceCharactersInRange:replaceRange withString:@"Hello"];
    NSRange deleteRange = NSMakeRange(5, 10);
    [mustr3 deleteCharactersInRange:deleteRange];
    

    2.【OC/2-2】集合类型

    NSArray & NSMutableArray

    • 初始化
    NSArray *array = [NSArray arrayWithObjects:@"Shanghai",@"Beijing", nil];
    NSArray *array = [[NSArray alloc] initWithObjects:@"Shanghai",@"Beijing", nil];
    NSArray *array = @[@"Shanghai",@"Beijing"];
    NSMutableArray *muArray=[NSMutableArray arrayWithObjects:p1,p2,p3,p4, nil];
    //nil为空
    
    • 元素个数
    array.count
    
    • 打印数组
    NSLog(@"array: %@" ,array);
    
    • 数组元素只能是对象
    /*不能直接放基本数值类型,使用NSNumber将NSInteger包装为对象*/
    NSNumber *numberObject1=[NSNumber numberWithInteger:300];
    NSNumber *numberObject2=@300u;//使用字面常量初始化
    /*使用NSValue将struct包装为对象*/
    Point point;
    point.h=100;
    point.v=200;
    NSValue *pointObject=[NSValue value:&point withObjCType:@encode(Point)];
    /*不能存放nil*/
    NSNull* nullValue=[NSNull null];
    
    • NSArray【不可】改变元素长度以及元素指针,【可以】改变指针指向的内容
    • 快速遍历
    for (类 对象 in array)
    
    • 查找元素
    -(NSUInteger)indexOfObject:(id)anObject; //查找对象(isEqual)
    -(NSUInteger)indexOfObjectIdenticalTo:(id)anObject; //查找指针
    
    • 排序(不改变原有数组,返回的是新数组)
    NSArray* sortArray = [array sortedArrayUsingSelector:@selector(compare:)];
    
    • NSMutableArray修改元素
    [muArray addObject:p];
    [muArray removeObjectAtIndex:2];
    [muArray insertObject:p atIndex:1];
    muArray1[0]=p;
    

    NSSet & NSMutableSet

    特点:无序集合,对象唯一,hash实现查找更快

    NSDictionary & NSMutableDictionary

    key-value对

    • 初始化(注意KV位置是相反的)
    NSDictionary *dictionary1 = @{
          @"Shanghai" : p1,
          @"Beijing" : p2,
          @"New York" : p3,
          @"Paris" : p4
    };
    NSMutableDictionary *dictionary2 = 
    [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                    p1, @"Shanghai",
                                    p2, @"Beijing",
                                    p3, @"New York",
                                    p4, @"Paris",
                                    nil];
    
    • 根据关键字查值
    [dictionary1 objectForKey:@"Beijing"]
    dictionary1[@"Shanghai"]
    
    • 快速遍历
    for(NSString* key in dictionary1) {
          id object=dictionary1[key];
          NSLog(@"key:%@, object:%@", key, object);
    }
    
    • 修改值
    [dictionary2 setObject:p5 forKey:@"London"];
    [dictionary2 removeObjectForKey:@"Shanghai"];
    

    3. 【OC/2-3】ARC

    自动释放池 @autoreleasepool

    • 默认主线程自动调用,创建新线程时需要自己再创建
    • 可以嵌套使用

    4. 【OC/2-4】类型合同:协议

    @protocol

    • 定义时:写在.h中,不需要写实现
      使用时:方法在.m中实现,属性要在.h中重新声明,@require方法一定要实现,@optional方法可选;【格式】@interface 子类: 父类 <协议>
    • 可作为声明类型
      实现了协议的类的对象可以传给一个声明类型为协议的参数
    • 不确定对象类型是否遵循协议时
    if ([obj conformsToProtocol:@protocol(AProtocol)]) {
          //遵守了协议
    }
    
    • 协议可继承

    5. 【OC/2-5】类别与扩展

    类别

    • 创建新文件实现
      命名规范:类+类别(首字母大写)
    • 不可添加实例变量、属性

    扩展

    • 定义和实现均和原来的类写在一起(.m文件中)
    • 外部不允许访问(私有)

    相关文章

      网友评论

          本文标题:【GeekBand】Week2. 笔记整理

          本文链接:https://www.haomeiwen.com/subject/mprflttx.html