黑马程序员---【OC语言】08Foundation框架

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

对于框架这一块,通过学习我感觉这一块就是为大家提供一些公共的工具(写好的类)。对于一些经常用到的东西,Foundation框架已经封装好了,大家可以拿来直接应用

一、结构体


Foundation框架中的结构体主要包含:NSRange、NSPoint/CGPoint、NSSize/CGSize、NSRect/CGRect。

1、NSRange:表示一个范围,它的定义形式为:


typedef struct _NSRange {  
    NSUInteger location;  
    NSUInteger length;  
} NSRange; 

结构体中的NSUInteger表示是long类型,location为位置,length为长度。

#import <Foundation/Foundation.h>  
  
int main(int argc, const charchar * argv[])  
{  
    NSString *str = @"i love oc"; //定义一个字符串  
      
    //利用结构体求出love在字符串中的位置  
    NSRange range = [str rangeOfString:@"love"];  
      
    NSLog(@"%ld, %ld", range.location, range.length); //输出位置,2,4  
      
    return 0;  
}  

在找不到的情况下,location的返回值是-1,length的返回值是0。

2、CGPoint/NSPoint表示一个点,它的形式为:


struct CGPoint {  
  CGFloat x;  
  CGFloat y;  
}; 
CGPoint p1 = CGPointMake(12, 10); 

x表示点得横坐标,y表示点的纵坐标,CGFloat表示double类型。CGPoint是跨平台的结构体,而NSPoint是非跨平台的。

3、NSSize/CGSize表示一个区域,结构体定义为:


struct CGSize {  
  CGFloat width;  
  CGFloat height;  
}; 
CGSize size = CGSizeMake(20, 22);

width表示宽度,height表示高度,CGFloat表示double类型。

4、NSRect/CGRect表示在某个的一个区域,结构体定义为:


typedef struct _NSRect {  
      NSPoint origin;  
      NSSize size;  
} NSRect; 

NSRect rect = NSMakeRect(23, 13, 10, 8);  
CGRect rect1 = CGRectMake(12, 23, 15, 11);  //常用定义方式  
CGRect r2 = {{4, 5}, {23, 3}};  
CGRect r3 = {CGPointZero, CGSizeZero}; 

二、如何打印结构体?


1、利用遍历,逐个打印结构体中的数据,这点比较麻烦,在实际应用中一般不会用到。


2、把整个结构体转成字符串


NSPoint p2 = NSMakePoint(11, 3);  //另一种定义方式  
NSString *str2 = NSStringFromPoint(p2); //把结构体转换成字符串
 
  
NSLog(@"p2 = %@", str2); //输出字符串 输出结果为:p2 = {11,3}  

三、字符串


 Foundation框架中的字符串主要包含NSString,NSArray,NSSet,NSDictionary,NSDate,NSObject。


1、NSString


就是基本的字符串类型,在之前的操作中经常用到。它含有一个子类NSMutableString。区别:NSString创建的字符串是不可改变的,而NSMutableString创建的字符串是可以改变的。


字符串的创建方式:

NSString *str = @"i love oc"; //定义一个字符串  
NSString *str1 = [[NSString alloc] initWithFormat:@"age is %d", 10];  
  
//c字符串转oc字符串  
NSString *s2 = [[NSString alloc] initWithUTF8String:"jack"];  
  
//oc字符串转c字符串  
const charchar *s3 = [s2 UTF8String];  


URL:资源路径,形式为:协议头://路径。网络资源路径一般用http://...表示,本地资源用file://...表示。


2、集合类(NSArray,NSSet,NSDictionary,NSDate,NSObject


(1)NSArray/NSMutableArray


       NSArray定义的是一个不可变的数组,而NSMutableArray定义的是一个可以改变的数组。数组中可以存放任何的oc对象,但是基本数据类型不能放到数组中。


#import <Foundation/Foundation.h>  
  
int main(int argc, const charchar * argv[])  
{  
    NSArray *array = [NSArray array]; //定义一个数组,但是这样定义的数组之只能为空。  
    NSArray *a = @[@"jack", @"jim",@"rose"];  //定义不可变数组,快捷方式。此种方法只能创建不可变数组  
      
    NSMutableArray *array1 = [NSMutableArray array]; //定义一个可变数组  
    [array1 addObject:[[NSString alloc] init]]; //为可变数组添加元素  
    [array1 addObject:@"jack"];  
    [array1 addObject:@"rose"];  
      
    NSLog(@"%ld", array1.count); //输出结果为3  
      
    [array1 removeObject:@"jack"]; //移除数组中的对象  
    [array1 removeObjectAtIndex:0]; //移除数组中的0位置对象  
      
    NSLog(@"%ld", array1.count); //输出结果为1  
    return 0;  
}  


(2)NSSet和NSArray对比:

(a) 共同点:

都是结合类;
都只放oc对象;
本身不可变,都有一个子类

(b)不同点:

NSSet无序,NSArray有序。


//set方法使用  
NSSet *s = [NSSet set]; //创建一个空的set,而且不可改变  
//创建一个set字符串,并进行初始化,注意元素是无序的  
NSSet *s1 = [NSSet setWithObjects:@"jack", @"jim", @"rose", nil nil];  
  
NSString *str0 = [s1 anyObject]; //任意去一个元素 

(3)NSDictionary/NSDMutableDictionary

在NSDictionary中存储的都是键值对。对应关系为:索引->文字内容, key->value。


//创建一个字典对象,不可变  
NSDictionary *dic = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"];  
id obj = [dic objectForKey:@"name"];  //查找对象  
  
//快速创建字典方式,注意字典中的对象也是无序的  
NSDictionary *dic1 = @{@"name":@"jack", @"address":@"北京"};  
id obj1 = dic[@"name"]; //快速提取对象  
  
//创建一个可改变的字典  
NSMutableDictionary *dic2 = [NSMutableDictionary dictionary];  
[dic2 setObject:@"jack" forKey:@"name"]; //添加字典内容  
[dic2 removeObjectForKey:@"name"]; //删除字典元素 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值