黑马程序员 OC框架: Foundation

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——

常用结构体

NSRange

查找某个字符串在 str 中的范围

Range 结构体 有两个元素
length 和 location

快速定义 NSRange :

NSRange r = NSMakeRange(2, 4);

获得字符串的 Range 信息

NSString *s = @“hello world!”;

NSRange r = [s rangOfString:@“ll”];

结果 :

r.length = 2
r.location = 2

若找不到 :

length = 0
location = NSNotFound  ( 实际值为 -1 )

CGpoint/ NSpoint

CGpoint = NSpoint

CGpoint 是跨平台的,在开发中常用.

快速创建方法 :

CGPoint p1 = CGPointMake(10,9); //开发中常用

NSPoint p2 = NSMakePoint(120,20);

CGSize/NSSzie

NSSzie s1 = CGSizeMake(100, 50);
NSSzie s2 = NSMakeSize(20,20);

结构体打印

    NSRect r1 = CGRectMake(0, 0, 100, 50);

    NSString *str = NSStringFromRect(r1);

    NSLog(@"%@", str);

打印结构体的常用方法是先转换成字符串再打印

补充

CGPointZero == CGPointMake(0,0); 这种便捷的方法比较常用

CGPointEqualToPoint(p1 ,p2);   比较两个点是否相同

CGRectContainsPoint(Rect, Point)  判断矩形中是否包含这个点

CG 开头的函数依赖于 CoreGraphics 框架,而一般默认就有这个框架

这些函数功能的声明在 Foundation 框架中, 定义在 CoreGraphics 框架中.

Foundation 常用类

NSString
—>NSMutableString

NSArray
—>NSMutableArray

NSSet
—>NSMutableSet

NSDictionary
—>NSMutableDictionary

以上都是集合类 . 用法都非常类似.

NSString

不可变字符串的创建

    NSString *s1 = @"234234";

    NSString *s2 = [[NSString alloc] initWithSting:@”123123”]

    NSString *s3 = [[NSSting alloc] initWithFormat:@“age is %d”, 10];

转换

    NSString *s4 = [[NSString alloc] initWithUTF8String:”jack”]; // c 字符串—>oc 字符串

    const char *cs = [s4 UTF8String]; //oc字符串转 c 字符串


// 文件内容转 NSString
    NSString *s5 = [[NSString alloc] initWithContentsOfFile:@“文件路径” encoding:NSUTF8StringEncoding error:nil];
// NSUTF8StringEncoding 用到中文就可以用这种方法

NSMutableString : 可变字符串

NSString 的子类

创建和使用

NSMutableString *s1 = [NSMutableString stringWithFormat:@"age is 10"];

[s1 appendString:@“ 11 12”]; // 字符串拼接

[s1 deleteCharactersInRange:NSMakeRange(4, 2)];  // 删除指定范围字符串

比较稳妥的方法

NSRange range = [s1 rangeOfString:@"is"];
[s1 deleteCharactersInRang:range];

创建一个新的拼接后的字符串

NSString *s2 = [NSString stringWithFormat:@"age is 10"]
NSString *s3 = [s2 stringByAppendingString:@“ 11 12”]; 

URL

URL   : 资源路径
协议头 :// 路径
file  :// 本地资源
ftp   ://
http  ://weibo.com/a.png

URL 使用方法

NSURL *url = [[NUSRL alloc] initWithString:@"file:// /Users/apple/Desktop/1.txt"]; // 字符串转 URL

NSString *s6 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]; // URL 链接中的资源内容转 NSString

/* 

一般都会有一个类方法跟对象方法配对

[NSString stringWithFormat:@“”];  用类方法来初始化会更方便
[NSString stringWithContentsOfFile: ………];
[NSURL URLWithString:(NSString *)];
[NSURL fileURLWithPath:@“/Users/apple/Desktop/1.txt”];

*/

NSArray

oc 数组只能存放 oc 对象.不能存放非 oc 对象类型.比如 int/ struct/ enum 等就不能存放

创建 oc 数组

NSArray *array = [NSArray arrayWithObject:@"jack"]; // 就一个元素

NSArray *array2 = [NSArray arrayWithObject:@"jack",@"rose",nil]; // nil 是数组结束的标记

NSLog(@“%ld”, array2.count);

打印数组元素

NSLog(@"%@", [array2 objectAtIndex:1];

NSLog(@"%@", array2[1]); 语法糖

快速创建一个 NSArray 对象 只能创建不可变数组

NSArray *array3 = @[@"jack",@"rose",nil];

快速遍历oc 数组

for (int i = 0; i<array.count; i++)
{
    NSLog(@"%@", array[i]);
}

// id obj代表着数组中的每一个元素
for (id obj in array)
{
    NSLog(@"%@", obj);
}  

// 找出 obj 元素在数组中的位置
for (id obj in array)
{
    NSUInteger i = [array indexOfObject:obj];
    NSLog(@"%ld - %@", i, obj)
}

// 使用代码块. 每遍历到一个元素,就会调用依次 block
// 并且当前元素和索引位置当做参数传给 block
[array enumerateObjectsUsingBlock:
^(id obj, NSUInteger idx, BOOL *stop)
{
    NSLog(@"%ld - %@", idx, obj);

    if (idx == 1)
    {
        *stop = YES; // stop 为停止指针,退出条件
    }
}];

NSMutableArray

NSMutableArray *array = [NSMutableArray array];

[array addObject:@"jack"];  // 可以添加任意对象

删除所有元素

[array removeAllObjects];

删除指定的对象

[array removeObject:@“jack”];
[array removeObjectIndex:2]; 

NSSet/NSMutableSet

NSSet中的元素没有顺序

NSSet *s = [NSSet set];
NSSet *s2 = [NSSet setWithObject:@"jack",@"rose",nil];

NSLog(@“%ld”, s2.count];

随机拿出一个元素

NSString *str = [s2 anyObject]; 

NSSet 和 NSArray 的对比

1> 共同点

* 都是集合,都能存放多个 oc 对象
*只能存放 oc 对象,不能存放非 oc 对象类型
*本身都不可变,都有一个可变的子类

2>不同点

*NSArray 是有序的, NSSet 是无序的.

NSDictionary

 key ----> value
 索引 ----> 文字内容

字典里面存的东西都是键值对.

创建与查看 :

    //    NSDictionary *dict = [NSDictionary dictionaryWithObjects:@"jack" forKeys:@"key"];

    NSDictionary *dict = @{@"name": @"jack",@"address" : @"北京"};

    //    id obj = [dict objectForKey:@"name"];

    id obj = dict[@"name"];

    NSLog(@"%@", obj);

    NSLog(@"%ld", dict.count); // 返回键值对的个数

遍历字典

NSDictionary *dict = @{
                        @"name" : @"jack",
                        @"address" : @"北京",
                        @"qq" : @"123124"};

    [dict enumerateKeysAndObjectsUsingBlock:
     ^(id key, id obj, BOOL *stop) {
         NSLog(@"%@ - %@", key, obj);
     }];

NSMutableDictionary

    NSMutableDictionary *dict = [NSMutableDictionary dictionary];

    [dict setObject:@"jack" forKey:@"name"];
    [dict setObject:@"北京" forKey:@"adress"]; // 重复的键值对会覆盖

    [dict removeObjectForKey:@"name"]; //remove

oc 的方法都用英文写的非常直观了,所以英文好的会几乎都能猜出来它的方法.
所以,好好学习英语吧.

小结

1.NSArray\NSMutableArray

*有序
*快速创建(不可变): @[]
*快速访问元素: 数组名[i]

2.NSSet\NSMutableSet

*无序

3.NSDictionary\NSMutableDictionary

*无序
*快速创建(不可变): @{key1 : value1, key2 : value2, key3 :value3}
*快速访问元素: 字典名[key]

NSNumber

因为 oc 数组中不能存放除对象外的数据
所以 用 NSNumber 来进行转换

NSNumber *num = [NSNumber numberWithInt:10];
int a = [num intValue];

语法糖来了,编译器特性让我们写程序方便不少.

@20 将 20 包装成一个 NSNumber 对象

用法如下

@YES

@‘A’

@“A”

int age = 100;
@(age);    将 age 变量包装成 NSNumber 对象

NSValue

NSNumber 之所以能包装基本数据类型为对象,是因为继承了 NSValue.
NSValue 还能放 NSNumber 放不了的结构体等 

结构体—> oc 对象

CGPoint p = CGPointMake(10, 10);

NSValue *value= [NSValue valueWithPoint:p];

—> 结构体

[value pointValue];

NSDate

 创建一个时间对象

NSDate *date = [NSDate date];
创建的内容就是当前时间

主要用法 :

    // 日期格式化类
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
    // H (24) 时制 h (12) 时制

获得当前格式的时间 String

NSString *str = [formatter stringFromDate:date];

String —> date

NSString *time = @“2012/12/1 18:40”;

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy/MM/dd HH:mm";

NSDate *date = [formatter dateFromString:time];
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值