天天看點

黑馬程式員_object c學習日記_複習Foundation

-------------------------------------- android教育訓練、java教育訓練、ios教育訓練期待與您交流! ---------------------------------

包含Foundation頭檔案

#import <Foundation/Foundation.h>

結構體

NSRange:表示範圍,location位置(unsignedlong),length長度(unsigned long)

NSPoint\CGPoint:表示一個點,x(CGFloat\double),y(CGFloat\double)

NSSize\CGSize:表示ui的尺寸,width寬度(CGFloat\double),height高度(CGFloat\double)

NSRect\CGRect:表示位置大小,CGPoint和CGSize

//
//  main.m
//  Foundation中的結構體
//
//  Created by zhouxf on 14-4-17.
//  Copyright (c) 2014年 zhouxf. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{
    // NSRange
    //@"i love oc" // love的範圍
    // 位置2,長度4
    NSRange r1 = {2, 4};
    NSRange r2 = {.location = 2, .length = 4};
    NSRange r3 = NSMakeRange(2, 4); // 需要掌握
    
    NSString *str = @"i love oc";
    
    // 查找某個字元串在特定字元串的範圍
    // 如果找不到,length = 0,location = NSNotFound == -1
    NSRange range = [str rangeOfString:@"love"];
    
    // NSPoint\CGPoint
    NSPoint p1 = NSMakePoint(11, 11);
    CGPoint p2 = CGPointMake(1, 1); // 最常用
    // CG開頭函數是在CoreGraphics架構定義的,運作時需要将其加入
    
    // 表示原點
    //CGPointZero == CGPointMake(0, 0)
    
    // 點與點比較
    CGPointEqualToPoint(CGPointMake(1, 1), CGPointMake(11, 11));
    
    // NSSize\CGSize
    NSSize s1 = NSMakeSize(1, 1);
    CGSize s2 = CGSizeMake(11, 11); // 開發中常用CG
    
    //CGSizeZero == CGSizeMake(0, 0)
    
    // 比較尺寸
    CGSizeEqualToSize(CGSizeMake(1, 1), CGSizeMake(1, 1));
    
    // NSRect\CGRect
    CGRect rt1 = CGRectMake(0, 0, 10, 10);
    CGRect rt2 = {{0, 0}, {11, 11}};
    
    //CGRectZero == CGRectMake(0, 0, 0, 0)
    
    // CGRect比較
    CGRectEqualToRect(CGRectMake(0, 0, 1, 1), CGRectMake(0, 0, 1, 1));
    
    // CGRect是否包含點
    CGRectContainsPoint(CGRectMake(11, 11, 22, 22), CGPointMake(33, 33));
    
    // 将結構體裝化為字元串
    NSString *str1 = NSStringFromRange(r1);
    NSLog(@"%@", str1);
    NSString *str2 = NSStringFromPoint(p1);
    NSLog(@"%@", str2);
    NSString *str3 = NSStringFromSize(s1);
    NSLog(@"%@", str3);
    NSString *str4 = NSStringFromRect(rt1);
    NSLog(@"%@", str4);
    
    return 0;
}
           

Foundation中的常用類

NSString:不可變字元串

NSMutableString:可變字元串

/*
     NSString:不可變字元串
     NSMutableString:可變字元串
     */
    // 1.字元串的建立
    NSString *s1 = @"jack";
    NSString *s2 = [[NSString alloc] initWithString:s1];
    NSString *s3 = [[NSString alloc] initWithFormat:@"age is %d", 11];
    
    // c字元串轉oc字元串
    NSString *s4 = [[NSString alloc] initWithUTF8String:"jack"];
    
    // oc字元串轉c字元串
    const char *cs = [s4 UTF8String];
    
    // 從檔案中讀取内容
    NSString *s5 = [[NSString alloc] initWithContentsOfFile:@"/Users/zhouxf/Documents/code/other/other/main.m" encoding:NSUTF8StringEncoding error:nil];
    
    //URL:資源路徑
    // 協定頭://路徑
    // 本地資源 file://
    // ftp://
    // http://
    NSURL *url = [[NSURL alloc] initWithString:@"http://www.baidu.com"];
    //file:///Users/zhouxf/Documents/code/other/other/main.m
    NSString *s6 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
    
    NSLog(@"%@", s6);
    /*
     NSString類中有對象方法initWithXXX,一般就有對應的對象方法stringWithXXX與之配對
     其他類也是如此
     [NSString stringWithFormat:<#(NSString *), ...#>] == [[NSString alloc] initWithFormat:<#(NSString *), ...#>]
     */
    
    // 将字元串寫入檔案,writeToFile\writeToURL
    [@"jack\nrose" writeToFile:@"/Users/zhouxf/Documents/code/test.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];
    
    // 拼接内容到字元串後建立新字元串
    NSString *ns = [s1 stringByAppendingString:@"rose"];
    
    // 可變字元串
    NSMutableString *ms1 = [NSMutableString stringWithFormat:@"age is 10"];
    
    // 直接将拼接到可變字元串後面
    [ms1 appendFormat:@"%d %d", 11, 1];
    
    // 删除某個範圍的字元串
    NSRange range = [ms1 rangeOfString:@"is"];
    [ms1 deleteCharactersInRange:range];
    
           

(NSArray、NSSet、NSDictionary統稱為集合類)

NSArray:不可變數組

NSMutableArray:可變數組

l  有序;

l  快速建立(不可變):@[obj1,obj2, obj3]

l  快速通路元素:數組名[i]

// 集合類
    /*
     NSArray:不可變數組
     NSMutableArray:可變數組
     */
    // oc數組不能存放nil值
    // oc數組隻能存放oc對象、不能存放非oc對象類型,比如int、struct、enum等
    
    //這個array就是空數組,而且不可變
    //NSArray *array = [NSArray array];
    
    NSArray *array2 = [NSArray arrayWithObject:@"jack"];
    // nil是數組元素結束的标記
    NSArray *array3 = [NSArray arrayWithObjects:@"jack", @"rose", @"jim", nil];
    
    // 快速建立oc數組對象,編譯器特性
    NSArray *array4 = @[@"jack", @"rose"];
    
    // 擷取數組元素個數
    //[array2 count];
    NSLog(@"%ld", array2.count);
    
    // 通路數組元素
    NSLog(@"%@", [array3 objectAtIndex:1]);
    NSLog(@"%@", array3[1]); // 編譯器新特性,使用c數組通路方式
    
    // 周遊數組
    for (int i = 0; i < array3.count; i++) {
        NSLog(@"%@", array3[i]);
    }
    
    // 快速周遊數組
    // id obj 代表着數組中的每一個元素
    for (id obj in array3) {
        // obj在數組中的位置
        NSUInteger i = [array3 indexOfObject:obj];
        NSLog(@"%ld:%@", i, obj);
    }
    
    // 每周遊一個元素就調用一次block
    // 并且把目前元素和位置當作參數傳給block
    // stop:停止标志符, *stop = YES時停止周遊
    [array3 enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        NSLog(@"%ld:%@", idx, obj);
        
        if (idx == 1) {
            *stop = YES;
        }
    }];
    
    // 建立可變數組
    NSMutableArray *ma = [NSMutableArray arrayWithObjects:@"rose", @"jim", nil];
    
    // 增加元素
    [ma addObject:@"jack"];
    [ma addObject:@"jack1"];
    [ma addObject:@"jack2"];
    
    // 删除指定對象的元素
    [ma removeObject:@"jim"];
    
    // 删除指定位置的元素
    [ma removeObjectAtIndex:0];
    
    // 删除最後元素
    [ma removeLastObject];
    
    // 删除所有元素
    [ma removeAllObjects];
    
           

NSSet:不可變set

NSMutableSet:可變set合

l  無序

與NSArray比較:

1.    共同點

都是集合,都能存放多個oc對象

隻能存放oc對象,不能存放非oc對象(int、char、float等,結構體,枚舉)

本身不可變,都有一個可變的子類

2.    不同點

NSArray有序,NSSet無序

/*
     NSSet:不可變set
     NSMutableSet:可變字set
     */
    // 建立不可變set
    NSSet *set1 = [NSSet setWithObjects:@"jack", @"rose", nil];
    
    // 随機通路一個元素
    NSString *str = [set1 anyObject];
    
    // 建立可變set
    NSMutableSet *mset = [NSMutableSet set];
    
    // 增加元素
    [mset addObject:@"jack"];
    [mset addObject:@"jack1"];
    
    // 删除元素
    [mset removeObject:@"jack"];
    
           

NSDictionary:不可變字典

NSMutableDictionary:可變字典

l  無序

l  快速建立(不可變):@{key1:obj1,key2:obj2, key3:obj3}

l  快速通路元素:字典名[key]

/*
     NSDictionary:不可變字典
     NSMutableDictionary:可變字典
     */
    // 建立不可變字典
    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"];
    
    // 删除元素
    [md removeObjectForKey:@"name"];
    
    NSLog(@"%@", md);
    
    // 周遊
    NSArray *ka = [md allKeys];
    for (int i = 0; i < md.count; i++) {
        NSLog(@"%@:%@", ka[i], md[ka[i]]);
    }
    
    // 周遊
    [md enumerateKeysAndObjectsUsingBlock:^(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);//同上

NSVaule:能将任何資料類型都能包裝成oc對象

// 将結構體CGPoint包裝成NSVaule對象

NSVaule *v = [NSVaulevauleWithPoint:CGPointMake(1, 1)];

// 從NSVaule對象擷取CGPoint的值

[v pointVaule];

NSDate:日期類

/*
     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
//  計算檔案行數
//
//  Created by zhouxf on 14-4-9.
//  Copyright (c) 2014年 zhouxf. All rights reserved.
//

#import <Foundation/Foundation.h>

NSUInteger linesFromFile(NSString *path)
{
    // 擷取檔案管理者(單列對象)
    NSFileManager *fm = [NSFileManager defaultManager];
    
    // 是否是目錄标志符
    BOOL isDir = NO;
    // 判斷路徑是否存在
    BOOL isEx = [fm fileExistsAtPath:path isDirectory:&isDir];
    
    // 路徑不存在
    if (!isEx) {
        NSLog(@"the file of path:%@ is no exist!", path);
        return 0;
    }
    
    // 是目錄
    if (isDir) {
        NSUInteger count = 0;
        // 擷取目錄中的内容:即檔案和子目錄
        NSArray *nameArray = [fm contentsOfDirectoryAtPath:path error:nil];
        
        // 周遊
        for (NSString *name in nameArray) {
            // 拼接全路徑
            NSString *fileName = [NSString stringWithFormat:@"%@/%@", path, name];
            // 遞歸計算行數
            count += linesFromFile(fileName);
        }
        
        return count;
    } else {
        // 擷取檔案擴充名(忽略大小寫)
        NSString *extension = [[path pathExtension] lowercaseString];
        
        // 對檔案進行過濾
        if (![extension isEqualToString:@"h"]
            && ![extension isEqualToString:@"c"]
            && ![extension isEqualToString:@"m"]) {
            return 0;
        }
        
        // 讀取檔案内容
        NSString *fileContents = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
        
        // 通過換行符分割
        NSArray *fileLines = [fileContents componentsSeparatedByString:@"\n"];
        
        // 去掉檔案的公共路徑
        NSRange range = [path rangeOfString:@"/Users/zhouxf/Documents/code/"];
        NSString *file = [path stringByReplacingCharactersInRange: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;
}
           

-------------------------------------- android教育訓練、java教育訓練、ios教育訓練期待與您交流! ---------------------------------