iOS學(xué)習(xí)(OC語(yǔ)言)知識(shí)點(diǎn)整理
一、單例模式
1)單例是一種編程思想,一個(gè)設(shè)計(jì)模式,與語(yǔ)言無(wú)關(guān)在采用了單例對(duì)象的應(yīng)用程序中,需要單例類(lèi)自行提供實(shí)例化單例對(duì)象,
不管實(shí)例化單例對(duì)象多少次,只有一個(gè)對(duì)象存在,這個(gè)對(duì)象是全局的,能夠被整個(gè)應(yīng)用程序共享,訪問(wèn)
2)使用單例模式時(shí)使用類(lèi)提供的類(lèi)方法獲取單例對(duì)象,盡量不要用alloc init的方法獲取單例對(duì)象
3)單例類(lèi)提供類(lèi)方法獲取單例對(duì)象時(shí)類(lèi)方法一般以sharedXX/standedXX/defaultXX開(kāi)頭
實(shí)例代碼:
#import "Plane.h"static Plane *plane=nil;//定義一個(gè)靜態(tài)的全局變量@implementation Plane//獲取單例對(duì)象的方法 +(Plane *)sharedPalne{ //解決數(shù)據(jù)同步(當(dāng)一個(gè)線程訪問(wèn)時(shí),其他的線程不能操作 @synchronized(self){ if(plane==nil){ plane=[[Plane alloc]init]; } } return plane;}//當(dāng)調(diào)用alloc方法時(shí)會(huì)執(zhí)行此方法 +(id)allocWithZone:(struct _NSZone *)zone{ NSLog(@"%@",NSStringFromSelector(_cmd)); if(plane==nil){ plane=[super allocWithZone:zone]; } return plane;}@end
二、NSFileManager 文件/文件夾 的操作
1)NSFileManager 用于對(duì)文件或目錄(文件夾)管理的單例類(lèi)。
2)文件管理類(lèi)的實(shí)例化方法 例如:
1 NSFileManager *fm=[NSFileManager defaultManager];
3)fileExistsAtPath 用于判斷文件是否存在 例如:
1 BOOL ret=[fm fileExistsAtPath:@"/Users/kingkong/Desktop/Test/test.txt"];
4)createFileAtPath 用于創(chuàng)建文件 第一個(gè)參數(shù)是文件名,第二個(gè)參數(shù)是文件的初始值,第三個(gè)參數(shù)是文件的屬性 例如:
1 BOOL ret=[fm createFileAtPath:@"/Users/kingkong/Desktop/Test/test.txt" contents:nil attributes:nil];
5)copyItemAtPath 用于復(fù)制文件:將某一個(gè)文件復(fù)制成另一個(gè)文件,第三個(gè)參數(shù):回調(diào)錯(cuò)誤信息 例如:
1 NSError *error=nil;//用于接收錯(cuò)誤信息 3 NSString *curpath=@"/Users/kingkong/Desktop/Test/test.txt”; 5 NSString *topath=@"/Users/kingkong/Desktop/Test/test2.txt”; 7 ret=[fm copyItemAtPath: curpath toPath: topath error:&error]; 9 if(error!=nil){ 11 NSLog(@"error:%@",[error userInfo]); 13 }
6)moveItemAtPath 用于移動(dòng)/重命名文件;將某個(gè)路徑下的文件移動(dòng)到另一個(gè)路徑下的文件(目標(biāo)路徑一定要指定文件名),
如果源路徑與目 標(biāo)路徑下的文件名不同,同時(shí)重命名 例如:
1 NSString *curpath=@"/Users/kingkong/Desktop/Test/test.txt”;2 3 NSString *topath=@"/Users/kingkong/Desktop/Test/test2.txt”;4 5 [fm moveItemAtPath: curpath toPath: topath error:nil];
7)attributesOfItemAtPath 獲取文件的屬性 例如:
1 NSString *curpath=@"/Users/kingkong/Desktop/Test/test.txt";2 3 NSDictionary *dict= [fm attributesOfItemAtPath: curpath error:nil];4 5 //獲取屬性字典中該文件的大小6 7 NSLog(@"size:%@",[dict objectForKey:NSFileSize]);
8)removeItemAtPath 用于刪除指定路徑下的文件 例如:
1 NSString *path=@"/Users/kingkong/Desktop/Test/test.txt”;2 3 BOOL ret=[fm removeItemAtPath: path error:nil];
9)NSData:當(dāng)對(duì)文件操作(寫(xiě)數(shù)據(jù)到文件和從文件中讀數(shù)據(jù))和從網(wǎng)絡(luò)上獲取數(shù)據(jù),需要將數(shù)據(jù)轉(zhuǎn)換為純粹的二進(jìn)制形式,
NSData就是二進(jìn)制形式的緩存對(duì)象,相當(dāng)于C中的char buf[255] 例如:
1 NSString *path=@"/Users/kingkong/Desktop/Test/test.txt”;2 3 NSData *content=[fm contentsAtPath: path];
10)NSData數(shù)據(jù)轉(zhuǎn)換為NSString類(lèi)型數(shù)據(jù) 例如:
1 //NSData---->NSString,將NSData對(duì)象轉(zhuǎn)換為字符串2 3 NSString *scontent=[[NSString alloc]initWithData:content encoding:NSUTF8StringEncoding];
11)NSString類(lèi)型的數(shù)據(jù)轉(zhuǎn)換為NSData數(shù)據(jù) 例如:
1 NSString *str=@"hello China!";2 3 //NSString---->NSData;將字符串轉(zhuǎn)換為NSData數(shù)據(jù)(寫(xiě)入文件或傳輸?shù)骄W(wǎng)絡(luò)上)4 5 NSData *data2=[str dataUsingEncoding:NSUTF8StringEncoding];
12)createFileAtPath … contents 建文件并指定寫(xiě)入內(nèi)容 例如:
1 NSString *path=@"/Users/kingkong/Desktop/Test/test.txt”;2 3 [fm createFileAtPath:path contents:data2 attributes:nil];
13)fileExistsAtPath… isDirectory 判斷目錄是否存在(在文件/目錄存在的情況下,通過(guò)第二個(gè)參數(shù)獲取是否是目錄/文件) 例如:
1 BOOL isDir;//可能結(jié)果有:-1,0,12 3 NSString *path=@"/Users/kingkong/Desktop/Test/test.txt”;4 5 BOOL ret=[fm fileExistsAtPath:path isDirectory:&isDir];
14)contentsOfDirectoryAtPath 淺遍歷:獲取目錄下的子目錄和文件名 例如:
1 NSString *path=@"/Users/kingkong/Desktop/Test”;2 3 NSArray *array=[fm contentsOfDirectoryAtPath: path error:nil];4 5 NSLog(@"array%@",array);
15)subpathsAtPath 深遍歷:獲取目錄下所有的內(nèi)容(包括子目錄下的所有的內(nèi)容) 例如:
1 NSString *path=@"/Users/kingkong/Desktop/Test”;2 3 NSArray *array2=[fm subpathsAtPath:path];4 5 NSLog(@"array2:%@",array2);
16)currentDirectoryPath 獲取當(dāng)前應(yīng)用程序所在目錄 例如:
1 NSString* currentPath=[fm currentDirectoryPath];2 3 NSLog(@"%@",currentPath);
17)createDirectoryAtPath… withIntermediateDirectories 創(chuàng)建目錄,第一個(gè)參數(shù)是目錄名,第二個(gè)參數(shù)是
當(dāng)目錄不存在時(shí)是否需要?jiǎng)?chuàng)建其上一級(jí)不存在的目錄(中間目錄)
1 NSString *path=@"/Users/kingkong/Desktop/Test/File”;2 3 BOOL ret=[fm createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:nil];
三、NSFileHandle 對(duì)文件進(jìn)行讀寫(xiě)操作
1)fileHandleForReadingAtPath 創(chuàng)建一個(gè)只讀文件的對(duì)象(句柄) 例如:
1 NSString *path=@"/Users/kingkong/Desktop/Test/test.txt”;2 3 NSFileHandle *readHandle=[NSFileHandle fileHandleForReadingAtPath: path];
2)readDataOfLength 讀取文件中指定長(zhǎng)度的內(nèi)容 例如:
NSData *data=[readHandle readDataOfLength:3];NSString *sdata=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];NSLog(@"%@",sdata);
3)readDataToEndOfFile 從當(dāng)前位置讀取內(nèi)容到文件結(jié)束 例如:
1 data=[readHandle readDataToEndOfFile];2 3 sdata=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];4 5 NSLog(@"%@",sdata);6 7 [readHandle closeFile];//讀取文件內(nèi)容結(jié)束(注意如果上次讀取過(guò)沒(méi)關(guān)閉再次讀取時(shí)會(huì)從上次讀取結(jié)束位置開(kāi)始讀取)
4)fileHandleForWritingAtPath 創(chuàng)建一個(gè)只寫(xiě)文件的對(duì)象 例如:
1 NSFileHandle *writeHandle=[NSFileHandle fileHandleForWritingAtPath:path"]; 2 3 NSString *s1=@"hello"; 4 5 //seekToEndOfFile 將對(duì)象指針移到文件末尾(實(shí)現(xiàn)追加內(nèi)容) 6 7 [writeHandle seekToEndOfFile]; 8 9 [writeHandle writeData:[s1 dataUsingEncoding:NSUTF8StringEncoding]];10 11 //synchronizeFile將數(shù)據(jù)同步寫(xiě)入文件中12 13 [writeHandle synchronizeFile];14 15 [writeHandle closeFile];//表明操作結(jié)束
5)truncateFileAtOffset 從指定位置字符開(kāi)始截?cái)辔募?nèi)容,保留多少個(gè)字符,設(shè)置為0,再寫(xiě)入相當(dāng)于清空重寫(xiě) 例如:
1 [writeHandle truncateFileAtOffset:4];
6)seekToFileOffset 從指定位置字符開(kāi)始寫(xiě)入文件,覆蓋部分內(nèi)容 例如:
1 [writeHandle seekToFileOffset:2];
四、關(guān)于Path (文件路徑)的操作
1)pathComponents 獲取路徑的各部分 例如:
1 NSString *path=@"/Users/kingkong/Desktop/Test/text.txt”;2 3 NSArray *array1= [path pathComponents];4 5 NSLog(@"array1:%@",array1);
2)pathExtension 獲取文件后綴名 例如:
1 NSLog(@"%@",[path pathExtension]);//結(jié)果:txt
3)isAbsolutePath 判斷是否是絕對(duì)路徑:以/開(kāi)頭的路徑 例如:
1 NSLog(@"%d",[path isAbsolutePath]);//結(jié)果:1
4)lastPathComponent 獲取路徑的最后一部分 例如:
1 NSLog(@"last:%@",path.lastPathComponent);//結(jié)果:text.txt
5)stringByAppendingPathComponent 在一個(gè)路徑后添加另一個(gè)路徑 例如:
1 NSLog(@"%@",[path stringByAppendingPathComponent:@"files”]);2 3 //結(jié)果:/Users/kingkong/Desktop/Test/text.txt/files
6)stringByAppendingPathExtension 為路徑添加擴(kuò)展名 例如:
1 NSLog(@"%@",[path stringByAppendingPathExtension:@"m"]);2 3 //結(jié)果:/Users/kingkong/Desktop/Test/text.txt.m
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注