天天看點

黑馬程式員—(iOS開發)OC中Foundation詳解---(十一)

  ------- android教育訓練、iOS教育訓練、Java教育訓練、.NET教育訓練期待與您交流! ----------

PS:這節是重點喲!

說明:

1、結構體

2、集合

1、結構體

1> NSRange:(範圍)

① location定位下标;length定位的長度

② 使用:(NSString * str = @”i love you”;中love的範圍)

NSRange r1 = {2,4};//不用

NSRange r2 ={.location = 2,.length = 4};//不用

NSRange r1 = NSMakeRange(2,4); //掌握

//查找某個字元串在str中的範圍,若未找到,length=0,location=NSNotFound=-1;

NSRange range = [str rangeOfString:@”love”];

1>     NSPoint/CGPoint(點)

①     CGPoint p1 = NSMakePoint(5,3);

②     NSPoint p1 = CGPointMake (5,3);//最常用,跨平台

③     原點:CGPointZero == CGPointMake(0,0);

④     注意:将結構體轉為字元串輸出内容:NSString *str=NSStringFromPoint(p1);

2>     NSSize/CGSize(UI元素的尺寸)

①     NSSize n1 = CGSizeMake(100,50);或=NSMakeSize(100,50);

②     CGSize n2 = NSMakeSize(100,50);

③     注意:将結構體轉為字元串輸出内容:NSString *str=NSStringFromSize(n1);

3>     NSRect/CGRect(點和尺寸)

①     NSRect n1 = CGRectMake(5,3,100,50);//x,y,width,height

②     CGRect n2 = NSMakeRect(5,3,100,50);

。注意:可CGRect n2 = {{5,3},{100,50}};

                或:CGRect n2 ={p1,s2};

                原點:CGRect n2 ={CGPointMake(0,0), CGSizeMake(100,50)};

③     注意:将結構體轉為字元串輸出内容:NSString *str=NSStringFromRect (n1);

4>     CGPointEqualToPoint(比較兩個點的x和y值是否一緻):

①     BOOL b = CGPointEqualToPoint(CGPointMake (5,3), CGPointMake (5,3));

②     CGPointEqualToRect(CGrect rect1,CGRect rect2);

③     CGPointEqualToSize(CGSize size1,CGSize size2);

④     CGRectContainPoint(CGRectMake(5,3,100,50),CGPointMake(100,50));

5>      

2、NSString使用:

1>     NSString:不可變字元串;

NSMutableString(NSString的子類):可變字元串;

2>     字元串的建立:

①     NSString *s1 = @”jack”;

②     NSString *s2 = [[ NSString alloc] initWithString:@”jack”];

③     NSString *s3 = [[NSString alloc] initWithFormat:@”jack”];

//(C字元串-OC字元串)

④     NSString *s4 = [[ NSString alloc] initWithUTF8String:”jack”];

//(OC字元串—C字元串)

⑤     const char * cs = [s4 UTF8String];//const可省略

//檔案内容:(檔案路徑:initWithContentsOfFile;用到中文就可用此編碼:NSStringEncoding)

⑥     NSString *s5 = [[NSString alloc] initWithContentsOfFile:(NSString *) encoding:(NSStringEncoding) error:(NSError *_autoreleasing *)];

例如:NSString *s5 = [[NSString alloc] initWithContentsOfFile:@”/Users/Diana/apple/Desktop/1.txt” encoding:NSStringEncoding)error:nil];

//讀取檔案:(URL:讀取資源路徑;協定頭://路徑;file://;ftp://)

⑦     NSString *s6 = [[NSString alloc] initWithContentsOfURL:(NSURL *) encoding:(NSStringEncoding) error:(NSError *_autoreleasing *);

//定義URL:NSURL*url=[[NSURL alloc]initWithString:@”http://www.baidu.com”];或者:NSURL *url =[NSURL fileURLWithPath:@” /Users/Diana/apple/Desktop/1.txt”];

例如:NSString *s6 = [[NSString alloc] initWithContentsOfURL:url encoding:NSStringEncoding error:nil];

⑧      一般都有一個類方法與對象方法配對;

。NSURLè[NSURL URLWithString:(NSString *)];

。NSStringè[NSString stringWithFormat:@””];

⑨      

3>     将字元串導出到檔案中:(原子性操作,較安全【一旦中途失敗,就終止操作】:atomically:YES)

①       [@”jack\njack” writeToFile:@” /Users/Diana/apple/Desktop/1.txt” atomically:YES encoding:NSUTF8StringEncoding error:nil];

4>      

3、NSMutableString(NSString子類)的使用:

1>     可變

①     擁有父類的方法:

②     NSMutableString *s1=[ NSMutableString stringWithFormat:@”age is 10”];

//拼接内容到s1後面

[s1 appendString:@” 11,12”];

//删除某個範圍的字元

NSRange range = [s1 rangeOfString:@”is”];//找出is字元的範圍

[s1 deleteCharactersInRange:range];//删除

③      

2>      

4、集合類:NSArray/NSSet/NSDictionary  NSMUtableSet

1>     NSArray

①      (父類)NSArray:不可變數組(數組建立時有幾個元素就隻有幾個元素);

      (子類)NSMutableArray:可變數組;

②      NSArray *array = [NSArray array];//空數組(建立時未指定個數,是以為空數組)

。NSArray *array2 = [NSArray arrayWithObject:@”jack”];//一個對象

。NSArray *array3 = [NSArray arrayWithObjects:@”jack”,@”rose”,nil];//多個對象,nil是數組元素結束的标記;

。NSArray *array3 = @[@”jack”,@”rose”];//快速建立一個NSArray對象

。[array count];//使用get方法count輸出資料的個數

。[array objectAtIndex:1];//(效率低)元素的通路

。array[0];//根據下标查找數組内容(效率高)

③ OC數組隻能存放OC對象,不能存放非OC對象(如:int struct enum等);

④ OC數組不能存放nil值;

⑤ 周遊:

。普通周遊:

for(int i = 0; i < array.count;i++)

{

NSLog(@”數組是:%@”,array[i]);

}

。快速周遊:(id obj代表數組中的每一個元素)

for(id obj in array)

{

NSUInteger i =[array indexOfObject:obj];//找出obj元素在數組中的位置

NSLog(@”數組是:%d”,obj);

}

。快速周遊2:(推薦)

[array enumerateObjectsUsingBlock:

//每周遊一個元素,就會調用block,并将目前元素和索引位置當做參數傳給block;

^(id obj,NSUInteger idx,BOOL *stop)

{

NSLog(@”下标是:%ld,數組是:%d”,idx,obj);

//停止周遊

*stop = YES;

}];

⑤      

2>      

5、計算單個檔案的代碼行數(考察NSString、NSArray、NSFileManager的使用):

1>     檔案管理者:NSFileManager;

6、NSMutableArray可變數組的基本使用

1>     執行個體化:NSMutableArray * array = [NSMutableArray array];

2>     執行個體化并添加元素:NSMutableArray * array = [NSMutableArray arrayWithObjects:@”rose”,@”jim”,nil];

3>     添加數組元素:[array addObject:@”jack”];//可直接添加對象;

4>     删除元素:[array removeAllObjects];

5>     删除指定對象:[array removeObject:@”jack”];

6>     根據下标删除元素:[array removeObjectAtIndex:2];

7>     删除最後一個元素:[array removeLastObject];

8>     删除所有元素:[array removeAllObject];

9>     。。。。。。

7、NSSet基本使用(存放資料無順序):

1>     執行個體化:NSSet *s = [NSSet set];//空數組

2>     執行個體化并添加元素NSSet * s2 = [NSSet setWithObjects:@”jack”,@”rose”,nil];

3>     輸出元素個數:s2.count;

4>     随機傳回一個元素:[s2 anyObject];

8、NSMutableSet基本使用:

1>     執行個體化:NSMutableSet *s =[NSMutableSet set];

2>     添加元素:[s addObject:@”jack”];

3>     删除元素:[s removeObject:@”jack”];

4>     删除所有元素:[s removeAllObject];

9、NSSet和NSArray的對比:

1>     共同點:

①     都是集合,都能存放多個OC對象;

②     隻能存放OC對象,不能存放非OC對象類型(基本資料類型:int、float、char等,結構體、枚舉);

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

2>     不同點:

①     NSArray是有序的,NSSet是無序的;

3>      

10、字典NSDictionary的基本使用(不可變,無序):

1>     字典不允許有相同的key,但允許有相同的value(object);

2>     NSDictionary裡面存儲的東西都是鍵值對;

3>     執行個體化(存放一個鍵值對):NSDictionary *dict = [NSDictionary dictionaryWithObject:@”jack” forKey:@”name”];

4>     使用數組存放多個鍵值對:NSArray *keys = @[@”name”,@”address”];

NSArray *objects = @[@”jack”,@”北京”];

NSDictionary *dict = [NSDictionary dictionaryWithObject:objects forKey:@keys];

5>     執行個體化(不建議使用):NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@”jack”,@”name”,@”北京”,@”address”,nil];

6>     XCode簡化上面5的執行個體化:NSDictionary *dict = @{@”name”:@”jack”,@”address”:@”北京”};

7>     通路字典中的内容:id obj = [dict objectForKey:@”name”];

8>     XCode簡化通路字典中的内容:id obj = dict[@”name”];

9>     傳回鍵值對個數:dict.count;

10>  

11、NSMutableDictionary的使用:

1>     執行個體化:NSMutableDictionary *dict = [NSMutableDictionary dictionary];

2>     添加鍵值對:[dict setObject:@”jack” forKey:@”name”];

3>     移除鍵值對:[dict removeObjectForKey:@”name”];

4>      

12、字典的周遊:

1>     //key數組:NSArray *keys = [dict allKeys];

For(int i = 0; i < dict.count; i++)

{

        NSString *key = keys[i];//取出key

        NSString *object = dict[key]; //取出key對應的值

}

2>     XCode簡化上面周遊方法:

[dict enumerateKeysAndObjectsUsingBlock:

^(id key,id obj,BOOL *stop)

{

       NSLog(@”%@-%@”,key,obj);

       *stop = YES;

}];

13、集合總結:

1>     NSArray/NSMutableArray:

①     有序;

②     快速建立(不可變):@[];

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

2>     NSSet/NSMutableSet:

①     無序;

3>     NSDictionary/NSMutableDictionary:

①     無序;

②     快速建立:@{key1:value1,key2:value2};

③     快速通路:字典名[key];

4>     字典定義多個key值時的另一種方式:

①      NSArray *persons = @[

@{@”name”:@”jack”,@”qq”:@”23456788”},

@{@”name”:@”rose”,@”qq”:@”23456788”},

@{@”name”:@”jim”,@”qq”:@”23456788”},

] ;

②     取值:NSDictionary *jim = persons[2];

③     取值2:NSLog(@”%@”,persons[1][@”qq”]);//表先取出1位置對應的字典再取出字典中qq這個key對應的值;

14、NSNumber的使用(隻能包裝數字):

1>     NSNumber能包裝基本資料類型為對象,是因為繼承了NSValue;

2>     OC集合不能存放基本資料類型,就使用NSNumber包裝;

3>     包裝int資料:NSNumber *num = [NSNumber numberWithInt:10];

使用字典調用:NSDictionary *dict = @{@”name”:@”jack”,@”age”:num};

4>     擷取封裝後的基本資料:NSNumber *num2 = dict[@”age”];

5>     對象轉換成基本資料類型:int a = [num2 intValue];

6>     XCode中簡化上面2使用NSNumber将各種基本資料類型包裝成NSNumber對象:包裝基本資料:@基本資料(如:@20,@YES,@10.2,@’A’);

7>     注意:@’A’為NSNumber類型,@”A”為NSString類型;

8>     将age變量包裝成NSNumber對象:int age = 100;@(age);

9>      

15、NSValue的使用(可包裝任何東西:枚舉、結構體等):

1>     使用NSValue将結構體包裝成OC對象:(例如結構體:CGPoint p = CGPointMake(10,10);)NSValue *value = [NSValue valueWithPoint:p];

2>     将value轉為對應的結構體:[value pointValue];

3>      

16、NSDate使用:

1>     建立時間對象(date為運作這句話時的0時區時間):NSDate *date = [NSDate date];

2>     建立比date晚5秒的時間對象:NSDate *date 2= [NSDate 達特WithTimeInterval:5 sinceDate: date];

3>     傳回1970年開始走過的秒數:NSTimeInterval seconds = [date2 timeIntervalSince1970];

4>     日期格式化類:NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

設定格式(y年M月d日m分s秒H24時h12小時):formatter.dateFormat = @”yyyy-MM-dd HH:mm:ss”;

列印輸出格式後的:NSString * str = [formatter stringFromDate:date];

  ------- android教育訓練、iOS教育訓練、Java教育訓練、.NET教育訓練期待與您交流! ----------