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

------ 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()
{
    //创建一个不可变Set
NSSet *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对象

// 数字转NSNumber
NSNumber*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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值