---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
一、 Foundation – 结构体
NSRange(location length)
NSPoint\CGPoint 表示位置,点 NSPoint == CGPoint CGPoint可以跨平台,所以常用CGPoint
NSSize\CGSize 表示尺寸 NSSize == CGSize
NSRect\CGRect (CGPoint,CGSize) NSRect == CGRect
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
// 比较两个点是否相同 (x、y)
CGPointEqualToPoint(CGPointMake(10, 10), CGPointMake(10, 10));
// CGSizeEqualToSize(<#CGSizesize1#>, <#CGSize size2#>);
// CGRectEqualToRect(<#CGRectrect1#>, <#CGRect rect2#>);
// CGRectContainsPoint(<#CGRectrect#>, <#CGPoint point#>);
BOOL b = CGRectContainsPoint(CGRectMake(50, 40, 100, 50), CGPointMake(130, 70));
NSLog(@"%d",b);
// CGRectContainsRect(<#CGRectrect1#>, <#CGRect rect2#>);
return 0;
}
void point()
{
CGPoint p1 = NSMakePoint(10, 10);
NSPoint p2 = CGPointMake(20, 20); // 最常用== CGPoint p2 = CGPointMake(20, 20);
CGSize s1 = NSMakeSize(100, 50);
NSSize s2 = CGSizeMake(60, 60);
NSRect rect1 = CGRectMake(0, 0, 100, 100);
CGRect rect2 = NSMakeRect(0, 0, 100, 100);
// NSLog(@"x=%f, y=%f, width=%f, height=%f",rect1.origin.x, rect1.origin.y, rect1.size.width, rect1.size.height);
// 将结构体转为字符串
NSString *str = NSStringFromPoint(p1);
NSString *str1 = NSStringFromSize(s1);
NSString *str2 = NSStringFromRect(rect2);
NSLog(@"%@",str);
NSLog(@"%@",str1);
NSLog(@"%@",str2);
CGRect rect3 = { {0,0}, {100,90}};
CGRect rect4 = { p1, s2};
CGRect rect5 = { CGPointZero, CGSizeMake(100, 90)};
// 表示原点
// CGPointZero == CGPointMake(0, 0);
// CGSizeZero == CGSizeMake(0, 0);
// CGRectZero == CGRectMake(0, 0, 0, 0);
}
/*
CGRectMake()相当于
CGRect myRect( CGFloat x,CGFloat y, CGFloat width, CGFloat height )
{
CGRect rect;
rect.origin.x = x;
rect.origin.y = y;
rect.size.width = width;
rect.size.height = height;
return rect;
}
*/
void range()
{
// @"i love oc"; // love的范围
// NSRange r1 = {2, 4}; // 不用
// NSRange r2 = {.location = 2, .length =4}; // 不用
// NSRange r3 = NSMakeRange(2, 4); // 掌握
NSString *str =@"I love OC";
// 查找某个字符串在str中的范围
NSRange range = [str rangeOfString:@"ve O"];
NSLog(@"location = %ld,length = %ld",range.location,range.length);
// 如果找不到,lenght = 0, location =NSNotFound == -1
NSRange ranges = [str rangeOfString:@"ja"];
NSLog(@"location = %ld,length = %ld",ranges.location,ranges.length);
// range.location == NSUIntegerMax ==unsigned long ;
// NSLog(@"%d",NSNotFound);
}
二、 Foundation – 类
1、 常用类 – NSString
NSString : 不可变字符串
NSMutableString : 可变字符串
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
NSMutableString *s1 = [NSMutableString stringWithFormat:@"age is %d",10];
// 拼接内容到s1的后面
[s1 appendString:@" 11 12"];
// 获取is的范围
NSRange range = [s1 rangeOfString:@"is"];
// 删除字符串中的is
[s1 deleteCharactersInRange:range];
NSString *s2 = [NSString stringWithFormat:@"age is %d",10];
// 拿到s2的内容拷贝出,再把"11 12"放到后面,然后把拼接好的字符串赋值给s3,s2没变化
NSString *s3 = [s2 stringByAppendingString:@" 11 12"];
NSLog(@"s1 = %@, s2 =%@",s1, s2);
return 0;
}
void stringCreate()
{
/*
1、字符串的创建
*/
NSString *str = @"str";
// NSString *str1 = [[NSString alloc]initWithString:@"jack"];
NSString *str3 = [[NSString alloc] initWithFormat:@"age id %d", 10];
// C字符串 --> OC字符串
NSString *str4 = [[NSString alloc] initWithUTF8String:"jack"];
// OC字符串 --> C字符串
const char *cs = [str4 UTF8String];
// NSUTF8StringEncoding 用到中文就可以用这种编码
NSString *str5 = [[NSString alloc] initWithContentsOfFile:@"/Users/apple/Desktop/...." encoding:NSUTF8StringEncoding error:nil];
// NSString *str5 = [[NSString alloc]initWithContentsOfFile:@"/Users/zhangjingshan/Desktop/练习/1.txt"encoding:NSUTF8StringEncoding error:nil];
// NSLog(@"\n%@",str5);
// URL : 资源路径
// 协议头://路径
// http://
// file://
// ftp://
NSURL *url = [[NSURL alloc] initWithString:@"http://www.baidu.com"];
NSURL *url1 = [NSURL fileURLWithPath:@"/Users/apple/Desktop/...."];
NSString *str6 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
NSLog(@"str6 = \n%@",str6);
/*
一般都会有一个类方法跟对象方法配对
NSString *strq = [NSStringstringWithFormat:@""];
// [NSStringstringWithContentsOfFile:<#(NSString *)#>encoding:<#(NSStringEncoding)#> error:<#(NSError *__autoreleasing*)#>];
// NSURL *url = [NSURLURLWithString:<#(NSString *)#>];
// [NSString stringWithContentsOfURL:urlencoding:<#(NSStringEncoding)#> error:<#(NSError *__autoreleasing*)#>];
*/
}
void stringExport()
{
// 字符串的导出到文件
[@"Jack \n Jack" writeToFile:@"/Users/apple/Desktop/..." atomically:YES encoding:NSUTF8StringEncoding error:nil];
//
NSString *str= @"3rfsd";
NSURL *url = [NSURL fileURLWithPath:@"/Users/apple/Desktop/..."];
[str writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:nil];
}
2、 集合类
1> NSArray\NSMutableArray
*有序
*快速创建(不可变):@[obj1,obj2]
*快速访问元素:数组名[i]
2> NSSet\NSMutableSet
*无序
3> NSDictionary\NSMutableDictionary
*无序
*快速创建(不可变):@{key1 :value1, key2 : value2}
*快速访问元素:字典名[key]
4> NSArray 和 NSSet对比
a> 共同点
*都是集合,都能存放多个OC对象
*只能存放OC对象,不能存放非OC对象(基本数据类型:int、char、float等,结构体,枚举)
*本身都不可变,都有一个可变的子类
b>不同点
*NSArray是有序的,NSSet是无序的
a、 NSArray
NSArray : 不可变数组
NSMutableArray : 可变数组
Person.h
#import <Foundation/Foundation.h>
@interface Person : NSObject
@end
main.m
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[])
{
/*
// @[] 只创建不可变数组NSArray
// 错误写法
NSMutableArray*array = @[@"jack",@"rose"];
[arrayaddObject:@"jim"];
*/
return 0;
}
void NSArrayUse()
{
/*
Person *p =[[Person alloc] init];
Person*persons[5] = {p, [[Person alloc] init]};
*/
// 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];
// NSArray *array4 =[NSArray arrayWithObjects:@"jack",@"rose",@"he",nil]; ==
// 快速创建一个NSArray对象
NSArray *array4 = @[@"jack",@"rose",@"he"];
/*
2、NSArray的元素个数
*/
// [array2 count]; ==array2.count;
NSLog(@"%ld",array2.count);
/*
3、NSArray中元素的访问
*/
NSLog(@"%@",[array3 objectAtIndex:0]); // == array3[0]
// 编译器特性
NSLog(@"%@",array4[1]); // 使用这种方式
}
// 遍历数组
void Use()
{
Person *p = [[Person alloc] init];
NSArray *array = @[p,@"jack",@"sfxc"];
// for (int i=0; i<array.count; i++) {
// NSLog(@"%@",array[i]);
// }
// id obj代表着数组中的每一个元素
for (id obj in array)
{
// 找出obj元素在数组中的位置
NSUInteger i = [array indexOfObject:obj];
NSLog(@"%ld--%@", i,obj);
if (i == 1)
{
break;
}
}
// 每遍历到一个元素,就会调用一次block
// 并且当前元素和索引位置当做参数传给block
[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"%ld--%@", idx, obj);
if (idx == 1) {
// 停止遍历
*stop =YES;
}
}];
/*
enumerateObjectsUsingBlock的本质:
void(^myBlock)(id, NSUInteger, BOOL *) = ^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"%ld--%@", idx, obj);
if (idx == 1){
// 停止遍历
*stop = YES;
}
};
for (int i=0;i<array.count; i++) {
// 用来标记是否需要停止遍历
BOOL isStop =NO;
// 取出元素
id obj =array[i];
myBlock(obj,i, &isStop);
if (isStop) {
break;
}
}
*/
}
// 可变数组的基本使用
void user1()
{
// NSMutableArray *array=[NSMutableArray array];
NSMutableArray *array =[NSMutableArray arrayWithObjects:@"rose",@"jim", nil];
// 添加元素
[array addObject:[[Person alloc] init]];
[array addObject:@"jack"];
// 删除所有元素元素
// [arrayremoveAllObjects];
// 删除指定对象
[array removeObject:@"jack"];
[array removeObjectAtIndex:1];
NSLog(@"%@",array);
NSLog(@"%ld",array.count);
// 错误写法
// [array addObject:nil];
}
b、 NSSet
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
NSMutableSet *s = [NSMutableSet set];
// 添加元素
[s addObject:@"back"];
// 删除元素
[s removeObject:@"back"];
return 0;
}
// set的基本使用
void test()
{
// 创建一个空的set
// NSSet *s = [NSSet set];
NSSet *s1 = [NSSet setWithObjects:@"jack",@"rose",@"jack1",@"rose1",@"jack2", nil];
// 随机拿出一个元素
NSString *str = [s1 anyObject];
NSLog(@"%ld",s1.count);
NSLog(@"%@",str);
}
c、 NSDictionary
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
// 字典不允许有相同的key,但允许有相同的value(Object)
// 字典是无序的
NSDictionary *dict2 = @{
@"name": @"jack",
@"address":@"北京",
@"qq":@"78834253",
@"name1": @"jack",
@"name2": @"jack"
};
NSArray *keys = [dict2 allKeys];
//NSLog(@"%@",keys);
for (int i = 0; i<dict2.count; i++) {
NSString *key = keys[i];
NSString *object = dict2[key];
NSLog(@"%@ = %@",key, object);
}
[dict2 enumerateKeysAndObjectsUsingBlock:
^(id key, id obj, BOOL *stop) {
NSLog(@"%@ = %@", key, obj);
// *stop = YES;
}];
return 0;
}
void test()
{
/*
字典:
key --->value
索引 ---> 文字内容
里面存储的东西都是键值对
*/
// NSDictionary *dict =[NSDictionary dictionaryWithObject:@"jack" forKey:@"name"];
NSArray *keys = @[@"name",@"address"];
NSArray *objects = @[@"jack",@"北京"];
NSDictionary *dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
NSDictionary *dict1 = [NSDictionary dictionaryWithObjectsAndKeys:
@"jack", @"name",
@"北京", @"address",
@"3243434", @"qq"
, nil];
NSDictionary *dict2 = @{@"name": @"jack",@"address":@"北京"}; // 定义用这个
id obj = [dict objectForKey:@"name"];
id obj1 = [dict1 objectForKey:@"qq"];
id obj2 = dict2[@"name"];
NSLog(@"%@",obj);
NSLog(@"%@",obj1);
NSLog(@"%@",obj2);
// 返回的是键值对的个数
NSLog(@"%ld",dict2.count);
/*
// 错误代码
NSMutableDictionary *dict = @{@"name":@"jack"};
[dictsetObject:@"北京" forKey:@"address"];
*/
}
void test2()
{
NSMutableDictionary *dict =[NSMutableDictionary dictionary];
// 添加键值对
[dict setObject:@"jack" forKey:@"name"];
[dict setObject:@"北京" forKey:@"address"];
// 将以前的key为@"name"的覆盖
[dict setObject:@"rose" forKey:@"name"];
// 移除键值对
// [dictremoveObjectForKey:@"address"];
id obj = dict[@"name"];
NSLog(@"%@",obj);
NSLog(@"%@",dict);
}
void test3()
{
NSArray *person = @[
@{@"name": @"jack", @"qq":@"78834253", @"books":@[@"5分钟突破IOS编程",@"5分钟突破android编程"]},
@{@"name": @"rose", @"qq":@"534234"},
@{@"name": @"jim", @"qq":@"3425234"},
@{@"name": @"jake", @"qq":@"4634352455"}
];
NSDictionary *jim = person[2];
NSLog(@"%@",jim);
// 先取出1位置对应的字典
// 再取出字典中qq这个key对应的数据
NSLog(@"%@",person[1][@"qq"]);
NSLog(@"%@",person[0][@"books"][0]);
NSArray *array = person[0][@"books"];
NSLog(@"%@",array);
}
3、 NSNumber和NSValue
NSNumber 之所以能包装基本数据类型为对象,是因为继承了NSValue
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
// 将结构体包装成OC对象
CGPoint p = CGPointMake(10, 10);
// 将结构体转为Value对象
NSValue *value = [NSValue valueWithPoint:p];
NSArray *array = @[value];
// 将value转为对应的结构体
CGPoint pp = [value pointValue];
return 0;
}
void NSNumberTest()
{
NSNumber *num =[NSNumber numberWithInt:10];
NSDictionary *person = @{
@"name" : @"jack",
@"age" : num
};
NSNumber *num2 = person[@"age"];
int age =[num2 intValue];
NSLog(@"%d",age);
}
void NSNumberTest2()
{
NSNumber *num = [NSNumber numberWithDouble:10.5];
double d = [num doubleValue];
int a = 20;
NSString *str = [NSString stringWithFormat:@"%d",a];
int b = [str intValue];
NSLog(@"%.1f--%d", d, b);
// @20 将20包装成一个NSNumber对象
// 将各种数据类型包装成NSNumber对象
// @10.5
// @'A' NSNumber对象 @"A" NSString对象
// @YES
NSArray *array = @[
@{@"name" : @"jack", @"age": [NSNumber numberWithInt:20]},
@{@"name" : @"rose", @"age": @20},
@{@"name" : @"jim", @"age": @25},
@{@"name" : @"jake", @"age": @18},
];
// 将age变量包装成NSNumber对象
int age = 100;
@(age); // @age;是错误的
}
三、 Foundation –NSDate
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
NSString *time = @"2011/09/1018:56";
NSDateFormatter *formatter =[[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy/MM/dd HH:mm";
NSDate *date = [formatter dateFromString:time];
NSLog(@"%@",date);
return 0;
}
void test()
{
// 创建一个时间对象
NSDate *date = [NSDate date];
// 打印出的是0时区的时间 (北京-东8区)
NSLog(@"%@",date);
NSDate *date2 = [NSDate dateWithTimeInterval:60*60*8 sinceDate:date];
NSLog(@"%@",date2);
// 从1970开始走过的秒数
NSTimeInterval second = [date2 timeIntervalSince1970];
NSLog(@"%.2f",second);
NSTimeInterval second2 = [date2 timeIntervalSinceNow];
NSLog(@"%.2f",second2);
}
void date2string()
{
NSDate *date = [NSDate date];
// 日期格式化类
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
// y 年 M月 d日 H时 m分 s秒 H (24)时 h (12)时
formatter.dateFormat = @"yyyy-MM-ddHH:mm:ss";
NSString *str = [formatter stringFromDate:date];
NSLog(@"%@",str);
}
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------