时间:2017年05月10日星期三
说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com
教学示例源码:无
个人学习源码:https://github.com/zccodere/s...

第一章:Foundation结构简介

1-1 Foundation结构关系

Foundation.framework

Foundation:基础
framework:框架
基础框架

Foundation框架的类结构关系

clipboard.png

clipboard.png

第二章:NSString-字符串详解

2-1 NSString(上)

NSString字符串

NSString:不可变字符串
NSMutableString:可变字符串

C与OC字符串转换

stringWithUTF8String:C转OC
UTF8String:OC转C

基本用法

stringWithFormat:格式化字符串
stringByAppendingString:拼接字符串
lowercaseString:转为小写
uppercaseString:转为大写
hasPrefix:判断包含指定前缀
hasSuffix:判断包含指定后缀

代码演示:

char *s = "hello objective-c";
NSString *str = @"hello";

// OC与C字符串类型转换
// C -> OC
NSString *str1 = [NSString stringWithUTF8String:s];
NSLog(@"str1 = %@",str1);
// OC -> C
NSLog(@"str2 = %s",[str UTF8String]);

// 基本用法
// 创建字符串
NSString *str3 = @"iOS";
NSString *str4 = [[NSString alloc] init];
str4 = @"iOS";
// 格式化字符串
int a = 10;
int b = 20;
NSString *str5 = [NSString stringWithFormat:@"a = %d,b = %d",a,b];
NSLog(@"str5 = [ %@ ]",str5);
// 拼接字符串
NSString *str6 = [str5 stringByAppendingString:str3];
NSLog(@"str6 = [ %@ ]",str6);

// 大小写转换
// 转为小写
NSString *str7 = @"aBcDEF";
NSString *str8 = [str7 lowercaseString];
NSLog(@"str8 = %@",str8);
// 转为大写
NSString *str9 = [str7 uppercaseString];
NSLog(@"str9 = %@",str9);

// 前缀和后缀的判断
NSString *str10 = @"www.imooc.com";
// 判断前缀
BOOL hasPreFix = [str10 hasPrefix:@"www."];
if (hasPreFix) {
    NSLog(@"有对应前缀");
}else{
    NSLog(@"没有对应前缀");
}
// 判断后缀
BOOL hasSufFix = [str10 hasSuffix:@".com"];
if (hasSufFix) {
    NSLog(@"有对应后缀");
}else{
    NSLog(@"没有对应后缀");
}

2-2 NSString(中)

字符串常用方法

isEqualToString:判断两个字符串是否相同
componentsSeparatedByString:按照指定字符分隔字符串
substringWithRange:按照指定范围截取字符串
substringFromIndex:从某一位开始截取后面的字符串
substringToIndex:从开头截取到某一位
characterAtIndex:获取字符串指定位置的字符
rangeOfString:查找指定字符串的位置
stringByReplacingCharactersInRange:替换某一个范围的内容

代码演示:

// 判断两个字符串是否相同
NSString *str11 = @"helo";
NSString *str12 = @"hello";
if([str11 isEqualToString:str12]){
    NSLog(@"两个字符串相同");
}else{
    NSLog(@"两个字符串不同");
}
// 比较字符串
//NSComparisonResult

// 字符串分割
// 按照指定字符分割字符串
NSString *str13 = @"a,b,c,d,e,f,g";
NSArray *strArray = [str13 componentsSeparatedByString:@","];
for (NSString *strTemp in strArray){
    NSLog(@"str = %@",strTemp);
}

// 按照范围截取字符串
// 创建范围
NSRange range = NSMakeRange(1, 5);
NSString *str14 = [str13 substringWithRange:range];
NSLog(@"str14 = %@",str14);
// 从某一位开始截取后面的字符串
NSString *str15 = [str13 substringFromIndex:2];
NSLog(@"str15 = %@",str15);
// 从开头截取到某一位
NSString *str16 = [str13 substringToIndex:7];
NSLog(@"str16 = %@",str16);

// 将字符串拆分为每一个字符
for(int i=0;i<[str13 length];i++){
    NSLog(@"%c",[str13 characterAtIndex:i]);
}

// 查找
NSString *str17 = @"ab cd ef gh ij ab";
// 查找指定字符串的位置
NSRange range1 = [str17 rangeOfString:@"ab"];
NSLog(@"range1.location:%ld range1.length:%ld",range1.location,range1.length);

// 替换
NSString *str18 = @"Hello iOS,Hello imooc";
// 替换某一个范围的内容
NSString *str19 = [str18 stringByReplacingCharactersInRange:NSMakeRange(0, 5) withString:@"你好"];
NSLog(@"str19 = %@",str19);

2-3 NSString(下)

字符串常用方法

stringByReplacingOccurrencesOfString:用指定字符串替换原字符串中的子串
stringWithContentsOfFile:读取本地文件
writeToFile:写入本地文件

代码演示:

// 用指定字符串替换原字符串中的子串
// stringByReplacingOccurrencesOfString:源字符串中要被替换的内容;withString:替换的字符串
NSString *str20 = [str18 stringByReplacingOccurrencesOfString:@"Hello" withString:@"你好"];
NSLog(@"str20 = %@",str20);

// 读取文件
// 文件来源:1.本地文件。2.网络文件。
// 路径类
NSString *str21 = @"http://www.baidu.com";
// 网络路径
NSURL *httpURL = [NSURL URLWithString:str21];
// 本地路径
NSURL *fileURL = [NSURL fileURLWithPath:str21];
// 读取网络文件
NSString *httpStr = [NSString stringWithContentsOfURL:httpURL encoding:NSUTF8StringEncoding error:nil];
//NSLog(@"httpStr = %@",httpStr);
// 读取本地文件
NSString *fileStr = [NSString stringWithContentsOfFile:@"/Users/zc/Desktop/test.txt" encoding:NSUTF8StringEncoding error:nil];
NSLog(@"fileStr = %@",fileStr);

// 写入文件
NSString *str22 = @"Hello OC";
BOOL isOk = [str22 writeToFile:@"/Users/zc/Desktop/demo.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];
if(isOk){
    NSLog(@"文件写入成功");
}else{
    NSLog(@"文件写入失败");
}

2-4 NSMutableString

常用操作:

appendString:追加字符串
replaceCharactersInRange:替换字符串
insertString:插入字符串
deleteCharactersInRange:删除字符串

代码演示:

//
//  main.m
//  MutableStringDemo
//
//  Created by zc on 2017/5/10.
//  Copyright © 2017年 com.zccoder. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        // 可变字符串是字符串的子类
        NSMutableString *str = [[NSMutableString alloc] initWithCapacity:10];
        [str setString:@"Hello"];
        NSLog(@"str = %@",str);
        
        // 1.追加字符串
        [str appendString:@" world"];
        int a = 10;
        [str appendFormat:@" - %d",a];
        NSLog(@"str = %@",str);
        
        // 2.替换字符串
        NSRange range = [str rangeOfString:@"world"];
        [str replaceCharactersInRange:range withString:@"iOS"];
        NSLog(@"str = %@",str);
        
        // 3.插入字符串
        [str insertString:@"A" atIndex:6];
        NSLog(@"str = %@",str);
        
        // 4.删除字符串
        NSRange range1 = [str rangeOfString:@"AiOS"];
        [str deleteCharactersInRange:range1];
        NSLog(@"str = %@",str);
    }
    return 0;
}

第三章:NSArray-数组详解

3-1 NSArray(上)

OC数组的特点

OC的数组可以存储不同类型的对象
OC的数组只能存储对象
OC的数组存储的是对象的指针

代码演示:

// OC的数组可以存储不同类型的对象,OC的数组只能存储对象
NSArray *array1 = [[NSArray alloc] initWithObjects:@"1", @"2", @"3", @"4", @"5", nil];
// 数组的长度
int count = (int)array1.count;
NSLog(@"count = %d",count);
// 判断数组中是否包含对应的对象
BOOL isHave = [array1 containsObject:@"2"];
if(isHave){
    NSLog(@"存在");
}else{
    NSLog(@"不存在");
}
// 获取数组中最后一个元素
NSString *str = [array1 lastObject];
NSLog(@"str = %@",str);
// 获取数组中首个元素
str = [array1 firstObject];
NSLog(@"str = %@",str);
// 获取数组中下标为3的元素
str = [array1 objectAtIndex:3];
NSLog(@"str = %@",str);
// 获取元素对应的下标,如果元素不存在,则返回-1
int index = (int)[array1 indexOfObject:@"3"];
NSLog(@"index = %d",index);

3-2 NSArray(下)

数组的遍历

基本的for循环,通过下标逐一取出查看
使用for in快速枚举
枚举器也叫迭代器

代码演示:

// 数组的遍历
// 1.基本的for循环,通过下标逐一取出查看
for(int i=0;i<array1.count;i++){
    NSLog(@"array[%d] = %@",i,[array1 objectAtIndex:i]);
}

// 2.使用for in快速枚举。注:数组类型需一致
int i = 0;
for (NSString *strTemp in array1){
    NSLog(@"array[%d] = %@",i++,strTemp);
}

// 3.枚举器也叫迭代器
NSEnumerator *en = [array1 objectEnumerator];
id obj;
i = 0;
while (obj = [en nextObject]){
    NSLog(@"array[%d] = %@",i++,obj);
}

3-3 NSMutableArray

代码演示:

1、Person类声明

//
//  Person.h
//  MutableArrayDemo
//
//  Created by zc on 2017/5/10.
//  Copyright © 2017年 com.zccoder. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Person : NSObject

@property(nonatomic,strong)NSString *personName;

- (instancetype)initWithName:(NSString *)name;

@end

2、Person类实现

//
//  Person.m
//  MutableArrayDemo
//
//  Created by zc on 2017/5/10.
//  Copyright © 2017年 com.zccoder. All rights reserved.
//

#import "Person.h"

@implementation Person

- (instancetype)initWithName:(NSString *)name{
    self = [super init];
    if(self){
        _personName = name;
    }
    return self;
}

@end

3、main类

//
//  main.m
//  MutableArrayDemo
//
//  Created by zc on 2017/5/10.
//  Copyright © 2017年 com.zccoder. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Person.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        // 构造演示数据对象
        Person *p1 = [[Person alloc] initWithName:@"张三"];
        Person *p2 = [[Person alloc] initWithName:@"李四"];
        Person *p3 = [[Person alloc] initWithName:@"王五"];
        
        NSArray *personArray = [[NSArray alloc] initWithObjects:p2, p3 , nil];
        NSMutableArray *array = [[NSMutableArray alloc] init];
        
        // 添加元素
        [array addObject:p1];
        [array addObjectsFromArray:personArray];
        
        NSLog(@"1 %@",array);
        
        // 删除所有元素
        //[array removeAllObjects];
        //NSLog(@"2 %@",array);
        
        // 删除最后一个元素
        //[array removeLastObject];
        //NSLog(@"3 %@",array);
        
        // 删除指定元素
        //[array removeObject:p2];
        //NSLog(@"4 %@",array);
        
        // 删除指定下标元素,注:数组下标越界导致崩溃问题
        //[array removeObjectAtIndex:2];
        //NSLog(@"5 %@",array);
        
        // 交换元素位置
        [array exchangeObjectAtIndex:0 withObjectAtIndex:1];
        NSLog(@"6 %@",array);
    }
    return 0;
}

第四章:NSDictionary-字典详解

4-1 NSDictionary

代码演示:

//
//  main.m
//  DictionaryDemo
//
//  Created by zc on 2017/5/10.
//  Copyright © 2017年 com.zccoder. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        /*
         字典
         存储的内存不是连续的
         用key和value进行对应(键值)
         kvc 键值编码
         */
        // 创建单个键值对字典
        NSDictionary *dict1 = [NSDictionary dictionaryWithObject:@"1" forKey:@"a"];
        NSLog(@"dict1 = %@",dict1);
        // 创建多个键值对字典
        NSDictionary *dict2 = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"1", @"2", @"3", nil] forKeys:[NSArray arrayWithObjects:@"a", @"b", @"c", nil]];
        NSLog(@"dict2 = %@",dict2);
        // 简便写法,注:key 在前,value 在后。
        NSDictionary *dict3 = @{@"1":@"a", @"2":@"b"};
        NSLog(@"dict3 = %@",dict3);
        
        // 获取字典的长度
        int count = (int)[dict2 count];
        NSLog(@"count = %d",count);
        
        // 获取字典中指定键的值
        NSString *value1 = [dict2 valueForKey:@"b"];
        NSLog(@"value1 = %@",value1);
        
        // 获取字典中指定键的值
        NSString *value2 = [dict2 objectForKey:@"b"];
        NSLog(@"value2 = %@",value2);
        
        // 获取字典中所有的值
        NSArray *allValues = [dict2 allValues];
        NSLog(@"allValues = %@",allValues);
        
        // 获取字典中所有的键
        NSArray *allKeys = [dict2 allKeys];
        NSLog(@"allKeys = %@",allKeys);
        
        // 获取指定值的键,当字典中不存在指定值时,返回指定的标记
        NSArray *array = [dict2 objectsForKeys:[NSArray arrayWithObjects: @"a", @"b", @"d", nil] notFoundMarker:@"not fount"];
        NSLog(@"array = %@",array);
        
        // 遍历字典
        for(NSString *key in dict2){
            NSLog(@"%@ = %@",key,[dict2 valueForKey:key]);
        }
        
        // 使用迭代器遍历字典
        NSEnumerator *en = [dict2 keyEnumerator];
        id key = nil;
        while (key = [en nextObject]){
            NSLog(@"%@ = %@",key,[dict2 valueForKey:key]);
        }
    }
    return 0;
}

4-2 NSMutableDictionary

代码演示:

//
//  main.m
//  MutableDictionaryDemo
//
//  Created by zc on 2017/5/10.
//  Copyright © 2017年 com.zccoder. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
        
        // 添加键值对
        [dict setObject:@"1" forKey:@"a"];
        [dict setObject:@"2" forKey:@"b"];
        
        // 删除所有键值对
        //[dict removeAllObjects];
        //NSLog(@"1 dict = %@",dict);
        
        // 删除指定键值对
        [dict removeObjectForKey:@"b"];
        NSLog(@"2 dict = %@",dict);
    }
    return 0;
}

第五章:总结和课程预告

5-1 总结和预告

学习内容

NSString:字符串
NSArray:数组
NSDictionary:字典

预告

UIKit框架

妙手空空
1.3k 声望370 粉丝

博观而约取,厚积而薄发