黑马程序员_OC语言的Foundation 上

iOS,Android,Java培训,期待与您的交流
Foundation框架是iOS开发的基础框架,它包括字符串、集合、日期、时间等基础类。
1    结构体
1、NSRange(location length):用来表示一段范围,location表示起点,length表示长度。创建该结构体变量,一般用系统提供的NSMakeRange()函数。
int main()
{
    //创建NSRange的三种方式,一般用第三种
    NSRange r1 = {2, 4}; // 一般不用
    NSRange r2 = {.location = 2, .length = 4};// 一般不用
    NSRange r3 = NSMakeRange(2, 4); // 用这种方式
   
    NSString *str = @"i love oc";
    
    // 查找某个字符串在str中的范围
    NSRange range1 = [str rangeOfString:@"love"];
    NSLog(@"loc = %ld, length=%ld", range1.location, range1.length);
    
    // 如果找不到,length=0,location=NSNotFound==-1
    NSRange range2 = [str rangeOfString:@"java"];
    NSLog(@"loc = %ld, length=%ld", range2.location, range2.length);

    return 0;
}

NSPoint\CGPoint (x,y):用来表示一个点,一般用CGPointMake()创建
NSSize\CGSize (width,height):用来表示一个平面空间的大小,一般用CGSizeMake()创建
NSRect\CGRect (CGPoint CGSize):用来表示一个矩形,它包含矩形左上角顶点坐标,以及矩形的大小,一般用CGRectMake()创建
int main()
{
    //创建Point,Size,Rect    
    CGPoint p = CGPointMake(0, 0);
    CGSize s = CGSizeMake(12, 20);
    CGRect r = CGRectMake(0, 0, 20, 30);    
    
    // 将结构体转为字符串
    NSString *str1 = NSStringFromPoint(p);   
    NSString *str2 = NSStringFromSize(s);   
    NSString *str3 = NSStringFromRect(r);
    
    NSLog(@"point = %@", str1);
    NSLog(@"size = %@", str2);
    NSLog(@"rect = %@", str3);

    return 0;
}
2    NSString和NSMutableString
NSString代表字符序列不可变的字符串,而NSMutableString则代表字符序列可变的字符串。NSMutableString是NSString的子类。NSString的大致包括如下功能。
1、创建字符串:可以使用init开头的实例方法,也可使用string开头的类方法,还可以直接使用@""的形式给出字符串常量
2、读取网络URL或文件初始化字符串
3、將字符串内容写入文件或URL
4、获取字符串长度,包括字符个数和字节个数
5、连接,分隔,替换,比较字符串
//创建字符串
void stringCreate()
{
    /*
     1.字符串的创建
     */
    NSString *s1 = @"jack";
    
    NSString *s2 = [[NSString alloc] initWithString:@"jack"];
    
    NSString *s3 = [[NSString alloc] initWithFormat:@"age is %d", 10];
    
    // C字符串 --> OC字符串
    NSString *s4 = [[NSString alloc] initWithUTF8String:"jack"];
    // OC字符串 --> C字符串
    const char *cs = [s4 UTF8String];
    
    // 读取文件创建字符串,NSUTF8StringEncoding 用到中文就可以用这种编码
    NSString *s5 = [[NSString alloc] initWithContentsOfFile:@"/Users/apple/Desktop/1.txt" encoding:NSUTF8StringEncoding error:nil];
    
    
    // URL : 资源路径
    // 协议头://路径
    // file://
    // ftp://
    // http://weibo.com/a.png
    
    
    // http://www.baidu.com
    
    // NSURL *url = [[NSURL alloc] initWithString:@"file:///Users/apple/Desktop/1.txt"];
    NSURL *url = [NSURL fileURLWithPath:@"/Users/apple/Desktop/1.txt"];
    
    NSString *s6 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
    NSLog(@"s6=\n%@", s6);
    
    
    /*
     一般都会有一个类方法跟对象方法配对
     [NSURL URLWithString:<#(NSString *)#>];
     [NSString stringWithFormat:@""];
     [NSString stringWithContentsOfFile:<#(NSString *)#> encoding:<#(NSStringEncoding)#> error:<#(NSError *__autoreleasing *)#>];
     
     */

}

void stringExport()
{
    // 字符串的导出
    [@"Jack\nJack" writeToFile:@"/Users/apple/Desktop/my.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];
    
    
    NSString *str = @"4234234";
    NSURL *url = [NSURL fileURLWithPath:@"/Users/apple/Desktop/my2.txt"];
    [str writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:nil];
}

int main()
{
    
    NSMutableString *s1 = [NSMutableString stringWithFormat:@"my age is 10"];
    // 拼接内容到s1的后面
    [s1 appendString:@" 11 12"];
    
    // 获取is的范围
    NSRange range = [s1 rangeOfString:@"is"];
    [s1 deleteCharactersInRange:range];
    
    NSString *s2 = [NSString stringWithFormat:@"age is 10"];
    
    NSString *s3 = [s2 stringByAppendingString:@" 11 12"];
    
    
    NSLog(@"s1=%@, s2=%@", s1, s2);
    
    return 0;
}

3    NSArray和NSMutableArray
NSArray代表元素有序,可重复的一个集合,集合中每个元素都有其对应的顺序索引,NSArray只能保存对象,不能保存基本类型。NSArray代表集合元素不可变的集合,一旦NSArray创建成功,程序不能向集合中添加新的元素,不能删除集合中已有的元素,也不能替换集合元素。NSMutableArray是NSArray的子类,它代表的是一个集合元素可变的集合,因此,可以向集合中添加,删除,替换元素。
void use()
{
    
    // OC数组不能存放nil值
    // OC数组只能存放OC对象、不能存放非OC对象类型,比如int、struct、enum等
    
    // 这个array永远是空数组
    // NSArray *array = [NSArray array];
    
    
    /*
     1.NSArray的创建
     */
    NSArray *array2 = [NSArray arrayWithObject:@"jack"];
    
    // nil是数组元素结束的标记
    NSArray *array3 = [NSArray arrayWithObjects:@"jack", @"rose", nil];
    // [array2 count];
    
    //NSArray *array4 = [NSArray arrayWithObjects:@"jack", @"rose", @"4324324", nil];
    
    // 快速创建一个NSArray对象
    NSArray *array4 = @[@"jack", @"rose", @"4324324"];
    
    //NSMutableArray *ARR = @[@"jack", @"rose"];
    
    
    /*
     2.NSArray的元素个数
     */
    NSLog(@"%ld", array3.count);
    
    
    /*
     3.NSArray中元素的访问
     */
    NSLog(@"%@", [array3 objectAtIndex:1]);
    
    //array3[1];
    NSLog(@"%@", array3[0]);
}

// 遍历数组
void use2()
{
    Person *p = [[Person alloc] init];
    
    NSArray *array = @[p, @"rose", @"jack"];

    //遍历数组,自定义方法   
    //    for (int i = 0; i<array.count; i++)
    //    {
    //        NSLog(@"%@", array[i]);
    //    }
    
    // id obj代表着数组中的每一个元素
    //int i = 0;
    //    for (id obj in array)
    //    {
    //        // 找出obj元素在数组中的位置
    //        NSUInteger i = [array indexOfObject:obj];
    //
    //        NSLog(@"%ld - %@", i, obj);
    //        //i++;
    //
    //        if (i==1)
    //        {
    //            break;
    //        }
    //    }
 
    //系统遍历数组的方法  
    [array enumerateObjectsUsingBlock:
     
     // 每遍历到一个元素,就会调用一次block
     // 并且当前元素和索引位置当做参数传给block
     ^(id obj, NSUInteger idx, BOOL *stop)
     {
         NSLog(@"%ld - %@", idx, obj);
         
         
         if (idx == 0)
         {
             // 停止遍历
             *stop = YES;
         }
         
     }];
    
 
}

//NUMutableArray的使用
void use3()
{
    NSMutableArray *array = [NSMutableArray arrayWithObjects:@"rose", @"jim", nil];

    // @[] 只创建不可变数组NSArray
    /* 错误写法
     NSMutableArray *array = @[@"jack", @"rose"];
     
     [array addObject:@"jim"];
     */
    
    
    // 添加元素
    [array addObject:[[Person alloc] init]];
    
    [array addObject:@"jack"];
    
    // 删除元素
    //[array removeAllObjects];
    // 删除指定的对象
    // [array removeObject:@"jack"];
    [array removeObjectAtIndex:0];
    
    // 错误写法
    // [array addObject:nil];
    
    
    NSLog(@"%@", array);
    
    NSLog(@"%ld", array.count);
}

iOS,Android,Java培训,期待与您的交流
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: tim_oc1init和tim_oc2init是STM32的定时器模块中的函数,用于初始化定时器的输出比较通道1和通道2。其中,tim_oc1init用于初始化通道1,tim_oc2init用于初始化通道2。这两个函数可以设置定时器的输出模式、极性、预分频器等参数,以满足不同的应用需求。 ### 回答2: tim_oc1init和tim_oc2init是两个函数,是在STM32开发中使用的定时器输出比较功能函数。 首先,我们需要了解一下定时器和定时器输出比较的概念。定时器是一种可编程、周期性的计时器,它能够在一定时间内产生定时中断或输出PWM信号。而定时器输出比较是指定时器对比较值进行比较,当定时器计数器计数值达到比较值时,定时器输出会发生变化。 tim_oc1init和tim_oc2init是用于设定定时器输出比较功能的函数,以tim_oc1init函数为例,它的具体功能包括: 1. 设定TIMx_CH1的输出模式和极性,可以选择PWM模式或脉冲模式,并可设定输出极性为正常或反转; 2. 设定比较值,即当计数器的值达到此值时触发输出; 3. 设定预分频系数和重载值,确定计时器的计数范围。 通过tim_oc1init和tim_oc2init函数的设定,可以实现定时器输出比较功能,可以控制各种电子设备的输出信号和开关控制,适用于各种行业的应用场景。在开发中,根据具体需求使用不同的输出模式和比较值,可以实现多种不同的功能操作。 ### 回答3: tim_oc1init和tim_oc2init是针对定时器的两个初始化函数。 首先,定时器是嵌入式系统中非常重要的一个模块,它可以通过计时和计数等方式实现各种定时和计时功能,比如控制LED灯闪烁、通过定时触发中断来完成一些任务等。 而tim_oc1init和tim_oc2init则是针对定时器的输出比较功能而设置的两个初始化函数,用于配置定时器的输出比较通道1和通道2。 对于tim_oc1init而言,它可以设置如下几个参数:定时器的指针、比较输出模式、预分频系数、占空比等。其中,比较输出模式有四种模式可供选择,分别为TIM_OCMode_Timing(定时模式)、TIM_OCMode_Active(有效电平模式)、TIM_OCMode_Inactive(无效电平模式)和TIM_OCMode_PWM1(脉冲宽度调制模式)。 而tim_oc2init则是针对定时器的输出比较通道2进行初始化,可以设置的参数与tim_oc1init相同,只不过它是控制通道2的输出状态。 需要注意的是,这两个函数都是基于STM32的定时器模块设计的,因此在使用它们时需要根据硬件平台来确定具体的实现方法和参数设置。 总的来说,tim_oc1init和tim_oc2init是非常重要的定时器初始化函数,可以方便地控制定时器的输出比较通道,从而实现各种自定义的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值