黑马程序员-OC语言-Foundation框架(听课笔记)

来源:互联网 发布:002063远光软件 编辑:程序博客网 时间:2024/06/10 21:50

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

1 、 Foundation 框架介绍

1)什么是框架?

框架是由许多类、方法、函数、文档按照一定的逻辑组织起来的集合,以便使研发程序变得更容易在OS X下的Mac操作系统中大约有80个框架为所有程序开发奠定基础的框架称为Foundation框架。


Foundation框架允许使用一些基本对象,如数字和字符串,以及一些对象集合,如数组,字典和集合,其他功能包括处理日期和时间、内存管理、处理文件系统、存储(或归档)对象、处理几何数据结构(如点和长方形)。


Cocoa是Foundation和AppKit

Cocoa Touch是Foundation和UIKit 


Foundation框架中大约有125个可用的头文件,作为一个简单的形式,可以简单地使用以下语句导入 : #import <Foundation/Foundation.h> 因为Foundation.h文件实际上导入其他所有Foundation框架中的头文件。


2)Foundation框架的作用

Foundation框架是Mac\iOS中其他框架的基础
Foundation框架包含了很多开发中常用的数据类型:
结构体
枚举

3)如何使用Foundation框架

要想使用Foundation框架中的功能,包含它的主文件即可
#import <Foundation/Foundation.h>

4)不小心修改了系统的文件,引起的错误

有时候会在不经意之间修改了系统自带的头文件, 比如NSString.h, 这时会出现以下错误:


解决方案很简单, 只需要删除Xcode的缓存即可, 缓存路径是/Users/用户名/Library/Developer/Xcode/DerivedData(默认情况下, 这是一个隐藏文件夹)


要想看到上述文件夹, 必须在终端敲指令显示隐藏文件夹, 指令如下:

显示隐藏文件 : defaults write com.apple.finder AppleShowAllFiles –bool true
隐藏隐藏文件 : defaults write com.apple.finder AppleShowAllFiles –bool false
(输入指令后, 一定要重新启动Finder)


2、具体内容

1.结构体

NSRange(location length)

表示一段范围

定义:

typedef struct _NSRange {

    NSUIntegerlocation;

    NSUIntegerlength;

} NSRange;

常见用法

创建一个nsrange

NSMakeRange(NSUInteger loc, NSUInteger len)

判断一个点是否在里面

BOOL NSLocationInRange(NSUInteger loc, NSRange range)

判断是否相等

BOOL NSEqualRanges(NSRange range1, NSRange range2)

小示例 

NSString *str = @"i love oc";


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


// 如果找不到,length=0,location=NSNotFound==-1


NSRange range = [str rangeOfString:@"java"];


NSLog(@"loc = %ld, length=%ld", range.location,range.length);


NSPoint\CGPoint

表示一个二维坐标系中的点

定义

struct CGPoint {

  CGFloat x;

  CGFloat y;

};

typedef struct CGPoint CGPoint;

常见用法

创建

CGPointMake(CGFloat x, CGFloat y)

比较两个点是否相同

CGPointEqualToPoint(CGPoint point1, CGPoint point2)

 

NSSize\CGSize

表示一个矩形区域

定义

struct CGSize {

  CGFloat width;

  CGFloat height;

};

typedef struct CGSize CGSize;

常见用法

创建

CGSizeMake(CGFloat width, CGFloat height)

比较两个区域是否相同

CGSizeEqualToSize(CGSize size1, CGSize size2)

NSRect\CGRect (CGPint CGSize)

表示一个矩形区域以及它的位置

定义

struct CGRect {

  CGPoint origin;

  CGSize size;

};

typedef struct CGRect CGRect;

常见用法

创建

CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloatheight)

判断一个点是否在指定区域

bool CGRectContainsPoint(CGRect rect, CGPoint point)

判断两个结构体是否有交错.可以用CGRectIntersectsRect

BOOL contains = CGRectContainsRect(CGRectrect1, CGRect rect2);

BOOL contains = CGRectIntersectsRect(CGRect rect1, CGRectrect2);

NSString的使用


//经典的字符串赋值
NSString *str0 = @"大家好我是VAE"; 


//字符串中加入变量赋值 
NSString *str1 = [NSString stringWithFormat:@"我是歌手%d号",6];


//字符串赋值
NSString *str2 = [NSString stringWithString:@"你好!"];


//字符串转换为utf-8格式
NSString *str3 = [NSString stringWithUTF8String:"赋值为utf-8格式的字符串"];


//字符串合并
int i  = 18;
char*c = "你好";
NSString *t = @"临时字符串";


//在字符串t的基础继续添加i与c 组成一个新的字符串
NSString *str4 = [t stringByAppendingFormat:@"整型: %d 字符型 :%s",i,c];


//类似上面
NSString *str5 = [temp stringByAppendingString:temp];


//字符串输出
NSLog(@"str0 = %@", str0);
NSLog(@"str1 = %@", str1);
NSLog(@"str2 = %@", str2);
NSLog(@"str3 = %@", str3);
NSLog(@"str4 = %@", str4);  
NSLog(@"str5 = %@", str5)


NSArray不可变对象数组的使用

  1. //NSArray的创建  
  2. NSArray *array1 = [NSArray arrayWithObject:@"jack"];  
  3.   
  4. // nil是数组元素结束的标记  
  5. NSArray *array2 = [NSArray arrayWithObjects:@"jack", @"rose", nil];  
  6.   
  7. NSArray *array3 = [NSArray arrayWithObjects:@"jack", @"rose", @"4324324", nil];  
  8.   
  9. //快速创建一个NSArray对象  
  10. NSArray *array4 = @[@"jack", @"rose", @"4324324"];  
  11.   
  12. //NSArray的元素个数  
  13. NSLog(@"%ld", array3.count);  
  14.   
  15. //NSArray中元素的访问  
  16. NSLog(@"%@", [array3 objectAtIndex:1]);  
  17.   
  18. //array3[1];  
  19. NSLog(@"%@", array3[0]); 

NSMutableArray可变对象数组的使用

  1. // @[] 只创建不可变数组NSArray  
  2. // 错误写法  
  3. NSMutableArray *array = @[@"jack", @"rose"];  
  4.   
  5. [array addObject:@"jim"];  
  6.   
  7. // 可变数组的基本使用  
  8. NSMutableArray *array = [NSMutableArray arrayWithObjects:@"rose", @"jim", nil];  
  9.   
  10. // 添加元素  
  11. [array addObject:[[Person alloc] init]];  
  12.   
  13. [array addObject:@"jack"];  
  14.   
  15. // 删除元素  
  16. [array removeAllObjects];  
  17. // 删除指定的对象  
  18. [array removeObject:@"jack"];  
  19. [array removeObjectAtIndex:0];  
  20.   
  21. // 错误写法  
  22. // [array addObject:nil];  

NSSet无序对象数组的使用

  1. NSSet *s = [NSSet set];  
  2.   
  3. NSSet *s2 = [NSSet setWithObjects:@"jack",@"rose", @"jack2",@"jack3",nil];  
  4.   
  5. // 随机拿出一个元素  
  6. NSString *str =  [s2 anyObject];  
  7.   
  8. //NSLog(@"%ld", s2.count);  


NSMutableSet无序可变数组的使用

  1. NSMutableSet *s = [NSMutableSet set];  
  2.   
  3. // 添加元素  
  4. [s addObject:@"hack"];  
  5.   
  6. // 删除元素  
  7. // [s removeObject:<#(id)#>];  


 NSDictionary不可变字典的使用
字典:

key ----> value

索引 ----> 文字内容

里面存储的东西都是键值对


  1. // 创建字典  
  2. NSDictionary *dict1 = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"];  
  3. // 创建字典  
  4. NSArray *keys = @[@"name", @"address"];  
  5. NSArray *objects = @[@"jack", @"北京"];  
  6. NSDictionary *dict2 = [NSDictionary dictionaryWithObjects:objects forKeys:keys];  
  7.  /*  
  8.  NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:  
  9.  @"jack", @"name",  
  10.  @"北京", @"address",  
  11.  @"32423434", @"qq", nil];  
  12.                                      */  
  13.   
  14. // 创建字典  
  15. NSDictionary *dict3 = @{@"name" : @"jack", @"address" : @"北京"};  
  16.   
  17. //访问元素  
  18. id obj = [dict3 objectForKey:@"name"];  
  19.   
  20. // 访问元素  
  21. id obj = dict[@"name"];  

NSMutableDictionary可变字典的使用

  1. NSMutableDictionary *dict = [NSMutableDictionary dictionary];  
  2.   
  3. // 添加键值对  
  4. [dict setObject:@"jack" forKey:@"name"];  
  5.   
  6.   
  7. [dict setObject:@"北京" forKey:@"address"];  
  8.   
  9. [dict setObject:@"rose" forKey:@"name"];  
  10.   
  11.   
  12. // 移除键值对  
  13. [dict removeObjectForKey:<#(id)#>];  
  14.   
  15. // 访问元素  
  16. NSString *str = dict[@"name"];  

由于有很多 在这里就不一一展示,在以后的博客,会继续学习总结。


0 0
原创粉丝点击