黑马程序员——OC语言------Foundation

来源:互联网 发布:老虎机的内部算法 编辑:程序博客网 时间:2024/05/16 05:51
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

Foundation

一、结构体

1>范围:NSRange(location length)

//NSRange r1 = {2,4}; // 不用//NSRange r2 ={.location = 2, .length = 4};// 不用//NSRange r3 =NSMakeRange(2, 4); // 掌握NSString *str =@"i love oc";

    // 查找某个字符串在str中的范围NSRange range = [strrangeOfString:@"love"];NSLog(@"loc =%ld, length=%ld", range.location, range.length);

 

2>点:NSPoint\CGPoint

 CGPoint p1 =CGPointMake(20, 20);NSPoint p2 =NSMakePoint(10, 10);

或者:

CGPoint p1 =NSMakePoint(10, 10);NSPoint p2 =CGPointMake(20, 20);

 

// 比较两个点是否相同(x、y)

BOOL b =CGPointEqualToPoint(CGPointMake(10, 10), CGPointMake(10, 10));

 

3>尺寸:NSSize\CGSize

NSSize s1 =CGSizeMake(100, 50);NSSize s2 =NSMakeSize(100, 50);CGSize s3 =NSMakeSize(200, 60);

 

4>区域:NSRect\CGRect (CGPoint CGSize)

原理:

typedef struct_NSRect { 

      NSPointorigin; 

      NSSizesize; 

} NSRect; 

 

CGRect r1 =CGRectMake(0, 0, 100, 50);   CGRect r2 = { {0,0}, {100, 90}};   CGRect r3 = {p1,s2};

    // 使用CGPointZero等的前提是添加CoreGraphics框架CGRect r4 ={CGPointZero, CGSizeMake(100, 90)};

表示原点:CGPointZero

CGPointZero ==CGPointMake(0, 0)

//区域是否包含点BOOL b2 =CGRectContainsPoint(CGRectMake(50, 40, 100, 50), CGPointMake(60, 45));


二、NSString和NSMutableString

NSString:不可变字符串

NSMutableString:可变字符串

1.字符串的创建

NSString *s1 =@"jack";   NSString *s2 =[[NSString alloc] initWithString:@"jack"];   NSString *s3 =[[NSString alloc] initWithFormat:@"age is %d", 10];


2.C字符串 --> OC字符串

NSString *s4 =[[NSString alloc] initWithUTF8String:"jack"];

 

3.OC字符串 --> C字符串

const char *cs = [s4UTF8String];

4.拼接字符串

NSMutableString *s1= [NSMutableString stringWithFormat:@"my age is 10"];    // 拼接内容到s1的后面[s1appendString:@" 11 12"];NSString *s3 = [s2stringByAppendingString:@" 11 12"];<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>


5.字符串的导出

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


三、集合类:NSArray和NSMutableArray

NSArray :不可变数组

NSMutableArray : 可变数组

 

使用细节:

1.NSArray的创建         NSArray *array2 = [NSArrayarrayWithObject:@"jack"];       // nil是数组元素结束的标记    NSArray *array3 = [NSArrayarrayWithObjects:@"jack", @"rose", nil];       //NSArray *array4 = [NSArrayarrayWithObjects:@"jack", @"rose", @"4324324",nil];   // 快速创建一个NSArray对象NSArray *array4 =@[@"jack", @"rose", @"4324324"];

注意:

1> @[] 只创建不可变数组NSArray。

2> OC数组不能存放nil值

3>  OC数组只能存放OC对象、不能存放非OC对象类型,比如int、struct、enum等

 

2.NSArray的元素个数     NSLog(@"%ld", array3.count);    


3.NSArray中元素的访问     NSLog(@"%@", [array3objectAtIndex:1]);   array3[1];NSLog(@"%@", array3[0]);

 

//遍历数组Person *p = [[Personalloc] init];       NSArray *array = @[p, @"rose",@"jack"];[arrayenumerateObjectsUsingBlock:         // 每遍历到一个元素,就会调用一次block     // 并且当前元素和索引位置当做参数传给block     ^(id obj, NSUInteger idx, BOOL *stop)     {         NSLog(@"%ld - %@", idx,obj);                         if (idx == 0)         {             // 停止遍历             *stop = YES;         }             }];


// 可变数组的基本使用NSMutableArray*array = [NSMutableArray arrayWithObjects:@"rose", @"jim",nil];       // 添加元素    [array addObject:[[Person alloc] init]];       [array addObject:@"jack"];       // 删除元素    //[array removeAllObjects];    // 删除指定的对象    // [array removeObject:@"jack"];    [array removeObjectAtIndex:0];       // 错误写法    // [array addObject:nil];


四、集合类:NSSet和NSMutableSet

NSSet和NSArray的对比

1> 共同点

都是集合,都能存放多个OC对象

只能存放OC对象,不能存放非OC对象类型(基本数据类型:int、char、float等,结构体,枚举)

本身都不可变,都有一个可变的子类

 

 2> 不同点

NSArray有顺序,NSSet没有顺序 

// set的基本使用void test1(){    //创建一个不可变SetNSSet *s = [NSSet set];     //创建一个有元素的不可变Set    NSSet *s2 = [NSSetsetWithObjects:@"jack",@"rose", @"jack2",@"jack3",nil];       // 随机拿出一个元素    NSString *str=  [s2 anyObject];       NSLog(@"%@",str);    //打印元素个数    NSLog(@"%ld",s2.count);} void test2(){    //创建一个可变Set    NSMutableSet *s= [NSMutableSet set];       // 添加元素    [s addObject:@"yang"];       // 删除元素    [s removeObject(id)];}


五、集合类:NSDictionary和NSMutableDictionary

NSDictionary:可变字典

NSMutableDictionary:不可变字典

1.特点:

1>无序

2>快速创建(不可变):@{key1 : value1,  key2 : value2}

3>快速访问元素:字典名[key]

key ----> value

索引 ----> 文字内容

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

 

2.使用细节:

    // 创建不可变字典    NSDictionary *dict =[NSDictionary dictionaryWithObject:@"jack" forKey:@"name"];       NSArray *keya =@[@"name", @"age", @"address"];    NSArray *obja =@[@"jack", @11, @"北京"];    NSDictionary *dict2 =[NSDictionary dictionaryWithObjects:obja forKeys:keya];       NSDictionary *dict3 =[NSDictionary dictionaryWithObjectsAndKeys:                         @"jack", @"name",                          @"北京", @"address"                          ,nil];       // 快速创建字典,编译器特性    NSDictionary *dict4 =@{@"name": @"jack", @"address": @"北京"};       // 访问元素    [dict objectForKey:@"name"];       // 快速访问元素,编译器特性    id obj =dict[@"name"];       // 创建可变字典    NSMutableDictionary *md =[NSMutableDictionary dictionary];       // 增加或更新元素    [md setObject:@"jack"forKey:@"name"];    [md setObject:@"北京" forKey:@"address"];    [md setObject:@"rose"forKey:@"name"];    [md setObject:@"1111"forKey:@"qq"];       // 删除元素    [mdremoveObjectForKey:@"name"];       NSLog(@"%@", md);       // 遍历    NSArray *ka = [md allKeys];    for (int i = 0; i < md.count;i++) {        NSLog(@"%@:%@",ka[i], md[ka[i]]);    }       // 遍历    [mdenumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {        NSLog(@"%@=%@",key, obj);    }];

   

六、NSNumber

数字类,将数字包装成oc对象

// 数字转NSNumberNSNumber*num = [NSNumbernumberWithInt:11];//NSNumber转数字int i=[num intVaule];@20; // 快速创建NSNumber对象,编译器特性@10.1;@YES;@’a’;int age= 20;@(age);

七、NSValue

NSVaule:能将任何数据类型都能包装成oc对象

// 将结构体CGPoint包装成NSVaule对象NSVaule*v = [NSVaulevauleWithPoint:CGPointMake(1, 1)];// 从NSVaule对象获取CGPoint的值[v pointVaule];

 

八、NSDate

日期

    // 创建时间对象(当前时间)    NSDate*date = [NSDate date];       // 打印的时0时区时间   NSLog(@"%@", date);       // 创建比date晚5秒的时间对象    NSDate*date2 = [NSDate dateWithTimeInterval:5 sinceDate:date];       // 计算utc时间,单位:秒   /*double*/NSTimeInterval sec = [date2 timeIntervalSince1970];       // 日期格式化类   NSDateFormatter *df = [[NSDateFormatter alloc] init];       // 设计日期格式    // y 年 M 月 d 日    // m 分 s 秒 H (24)时 h (12)时   df.dateFormat = @"yyyy-MM-dd HH:mm:ss";       // 日期转字符串    NSString*ds = [df stringFromDate:date2];      NSLog(@"%@", ds);       NSString*time = @"2011/11/11 11:11";   df.dateFormat = @"yyyy/MM/dd HH:mm";       // 字符串转时间    NSDate*dt = [df dateFromString:time];       NSLog(@"%@", dt);

   

九、计算代码行数

////  main.m//  计算文件行数#import <Foundation/Foundation.h> NSUInteger linesFromFile(NSString *path){    // 获取文件管理者(单列对象)    NSFileManager *fm =[NSFileManager defaultManager];       // 是否是目录标志符    BOOL isDir = NO;    // 判断路径是否存在    BOOL isEx = [fmfileExistsAtPath:path isDirectory:&isDir];       // 路径不存在    if (!isEx) {        NSLog(@"the file ofpath:%@ is no exist!", path);        return 0;    }       // 是目录    if (isDir) {        NSUInteger count = 0;        // 获取目录中的内容:即文件和子目录        NSArray *nameArray = [fmcontentsOfDirectoryAtPath:path error:nil];               // 遍历        for (NSString *name innameArray) {            // 拼接全路径            NSString *fileName =[NSString stringWithFormat:@"%@/%@", path, name];            // 递归计算行数            count +=linesFromFile(fileName);        }               return count;    } else {        // 获取文件扩展名(忽略大小写)        NSString *extension = [[pathpathExtension] lowercaseString];               // 对文件进行过滤        if (![extensionisEqualToString:@"h"]            && ![extensionisEqualToString:@"c"]            && ![extensionisEqualToString:@"m"]) {            return 0;        }               // 读取文件内容        NSString *fileContents =[NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncodingerror:nil];               // 通过换行符分割        NSArray *fileLines =[fileContents componentsSeparatedByString:@"\n"];               // 去掉文件的公共路径        NSRange range = [pathrangeOfString:@"/Users/zhouxf/Documents/code/"];        NSString *file = [pathstringByReplacingCharactersInRange:range withString:@""];               // 打印文件路径和行数        NSLog(@"%@:%ld",file, fileLines.count);               // 返回行数        return fileLines.count;    }} int main(int argc, const char * argv[]){    NSString *path =@"/Users/zhouxf/Documents/code";    NSUInteger count = linesFromFile(path);    NSLog(@"lines count =%ld", count);    return 0;}

 


0 0