11.self 和 super
self代表一个指针,super是一个编译器指示符,self 和 super 都指向的都是相同的消息接收者,super通常代表父类,self通常代表自己
12.OC字符串
字符串拼接、分割、比较方法
NSString *string1 = @"www."
NSString *string2 = @"baidu.com"
//---------------- 拼接 -------------------
// 拼接方法1
NSString *string3 = [NSString stringWithFormat:@"%@%@", string1, string2];
// www.baidu.com
// 拼接方法2
string3 = [string3 stringByAppendingString: @"(百度网址)";
// www.baidu.com(百度网址)
// 拼接方法3
string3 = [string3 stringByAppendingFormat:@"%d年%d月%d日", 1970, 1, 1];
// www.baidu.com(百度网址)1970年1月1日
//---------------- 分割 -------------------
// 分割方法1
NSArray *components = [string3 componentsSeperatedByString:@"."];
components = [string3 componentsSeperatedByCharactersInSet: [NSCharacterSetcharacterSetWithCharactersInString:@".()"];
// 分割方法2
NSString *substring = [string3 substringFromIndex:5];
substring = [string3 substringToIndex:5];
substring = [string3 substringWithRange:NSMakeRange(2, 5)];
//---------------- 比较 -------------------
NSString *string1 = @"hello";
NSString *string2 = @"hello";
if (string1 isEqualToString:string2) {
// 正确:比较字符串内容
}
if (string1 == string2) {
// 错误:比较字符串指针
}
string1 = @"abc";
string2 = @"abcd";
NSComparisionResult result = [string1 compare:string2];
switch (result) {
case NSOrderedAscending:
NSLog(@"string1 < string2");
break;
case NSOrderedSame:
NSLog(@"string1 == string2");
break;
case NSOrderedDescending:
NSLog(@"string1 > string2");
break;
default:
break;
}
if ([string1 compare:string2] == NSOrderedSame) {
NSLog(@"相同");
} else
{
NSLog(@"不同");
}
13.OC数组-有序集合
不可变:数组元素个数不可变,元素类型不可变,对象地址;
// --------------- 新建不可变数组 -------------------
// 法1: nil是元素添加结束的标志
NSArray *array = [[NSArray alloc] initWithObjects:@"one", @"two", @"three", nil];
// 法2:使用此法创建的数组会由系统自动用上面的方法创建,不需要在末尾添加nil
array = @[@"1", @"2", @"3", @"4"];
// 法3: 通过NSArray 类方法来创建
array = [NSArray arrayWithObjects: @"one", array, nil]
// ------------------- 取出数组中的元素----------------------
NSArray *subarray = [array objectAtIndex:0];
id object = array[1];
// ------------------- 遍历数组中的元素 -----------------------
// for...in 索引,关心元素的index
for (NSInterger i = 0; i < array.count; i++) {
NSLog(@"%@", array[i]);
}
// for...in 元素,只关心元素
for (NSString *object in array) {
NSLog(@"%@", obejct)
}
// 如果不确定元素的类型,可以用id先代替类型(NSString -> id)
// 遍历数组中的元素 (枚举)
NSEnumerator *enumerator = [array objectEnumerator];
id object = [enumerator nextObject];
while (object) {
object = [enumerator nextObject];
}
// ------------ 排序 ---------------
// 法1:
NSArray *array = @[@"5", @"3", @"4" , @"1", @"2"];
NSArray *resultArray = [array sortedArrayUsingSelector: @selector(compare:)];
// 法2:
NSSortDescriptor *desc1 = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:NO];
sortDescriptorWithKey:@"key" ascending:NO];
resultArray = [array sortedArrayUsingDescription:@[desc1, desc2]];
14.OC字典-无序集合
// ---------------- 创建不可变字典 -----------------
// 法1
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: @"one", @"1", @"two", @"2", nil ];
// 法2
dict = @{@"name": @"Tom",
@"nickname":@"Tom",
@"age": @12,
@"sex": @"male"};
// 通过 key 查找 value
NSString *name = [dict objectForKey:@"name"];
NSNumber *name = dict[@"name"];
// 编译器在编译的时候会用自动转成第一个方法
// 通过 value 查找 key, 不可能有相同的key, 但是可能有多个key, 所以找到的key是一个数组
NSArray *keyArray = [dict allKeysForObject:@"Tom"];
// ----------------- 遍历字典 ---------------------
for (type *object in collection) {
statements
}
// 遍历key
for (NSString *key in dict) {
NSLog(@"%@: %@", key, dic[key]);
}
// 遍历value
for (id object in dict.allValues) {
}
// ------------ 可变字典的操作 --------------
// 可变字典要将不可变字典先传给可变字典
NSDictionary *dict = @{@"name": @"Tom",
@"nickname":@"Tom",
@"age": @12,
@"sex": @"male"};
NSMutableDictionary *mutableDict = [NSMutableDictionary dictionary]; // 声明一个可变字典
[mutableDict addEntriesFromDictionary: dict]; // 将不可变字典传给可变字典
// 增加一个键值对
[mutableDict setObject:@170 forKey:@"height"];
// 修改一个key对应的value
[mutableDict setObject:@30 forKey:@"age"];
// 删除一个键值对
[mutableDict removeObjectForKey:@"height"];
网友评论