【GeekBand】Week2. 笔记整理

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. 笔记整理)