【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文件中)
  • 外部不允许访问(私有)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335

推荐阅读更多精彩内容