------- 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教育訓練期待與您交流! ----------