- 1.iOS的UIImage的兩種不同的圖片加載方式
NSString *imagePath = [[NSBundle mainBundle] pathForResource:@“1” ofType:@“.jpg”];
UIImage *image = [[UIImage alloc] initWithContentsOfFile:imagePath];
此種方式是直接加載圖片,直接從文件中獲取圖片,不會出現(xiàn)緩存.
UIImage *image = [UIImage imageWithName:@“1.jpg”];
此種方式加載圖片會出現(xiàn)緩存,如果二次調(diào)用,則不會從文件中讀取,而是直接緩存中拿,會導(dǎo)致內(nèi)存越來越大.優(yōu)點(diǎn):讀取速度很快.
-
2.iOS中的沙盒,沙盒機(jī)制,沙盒的特點(diǎn).
- (1).沙盒:沙盒是蘋果給每個App應(yīng)用程序分配的一個獨(dú)立,封閉安全的文件目錄.文件目錄下有三個文件夾, Documents, Library, tmp. Documents文件夾會自動被iTunes備份,Library文件夾下有Caches與Preference文件夾,Caches文件夾是存放緩存數(shù)據(jù)的目錄,Preference則存放的用戶偏好設(shè)置的數(shù)據(jù),一般情況有系統(tǒng)維護(hù),開發(fā)者只能通過使用NSUserDefaults來將數(shù)據(jù)文件中保存在該文件目錄下.tmp文件目錄下則保存的是用戶使用的臨時數(shù)據(jù)文件,應(yīng)用程序會在重新加載或者關(guān)機(jī)后重啟,清除該目錄下的文件.
- (2).沙盒機(jī)制:沙盒機(jī)制是一種安全機(jī)制.
- (3).沙盒特點(diǎn):每一個應(yīng)用程序的活動范圍限定在自己的沙盒內(nèi);不能隨意的跨越自己的沙盒去訪問別的App的沙盒;訪問別的App的沙盒接收或請求數(shù)據(jù)必須經(jīng)過授權(quán).
-
- (1).沙盒簡單對象的存儲(例:NSArray)
// 需要寫入文件中的數(shù)組
NSArray *array = @[@"Hello",@",",@"world",@"!"];
// 獲取沙盒Documents的地址
NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
// 拼接一個plist文件地址
NSString *filePath = [docPath stringByAppendingPathComponent:@"array.plist"];
// 將數(shù)組寫入沙盒指定文件中
BOOL flag = [array writeToFile:filePath atomically:YES];
// 判斷是否寫入成功
if (flag) {
NSLog(@"Success!");
} else {
NSLog(@"Error!");
}
NSArray * writeToFile:filePath atomically:BOOL//此方法中的atomically參數(shù)值為YES,則表示文件首先寫入在緩存文件中,寫完成后,在寫入到指定的文件中,參數(shù)為NO,則直接寫入到指定的文件中.
- (2).沙盒簡單對象的讀取(例:NSArray)
// 獲取沙盒的Documents的地址
NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
// 拼接目標(biāo)文件的地址
NSString *filePath = [docPath stringByAppendingPathComponent:@"array.plist"];
// 讀取其中的數(shù)據(jù)
NSArray *array = [NSArray arrayWithContentsOfFile:filePath];
- (3).沙盒復(fù)雜對象的存儲(例:Student)
-(void)saveStudent {
// 聲明將要保存的Student對象
Student *student = [[Student alloc] initWithName:@"Carson" gender:@"Male" age:23];
// 容器,將Student的對象轉(zhuǎn)換成為data
NSMutableData *data = [[NSMutableData alloc] init];
// 初始化歸檔器
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
// 開始?xì)w檔
[archiver encodeObject:student forKey:@"student"];
// 歸檔結(jié)束
[archiver finishEncoding];
// 將data保存在指定文件目錄下
NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
// 拼接文件目錄
NSString *filePath = [docPath stringByAppendingPathComponent:@"student.txt"];
// 寫入文件中
BOOL flag = [data writeToFile:filePath atomically:YES];
// 判斷是否寫入成功
if (flag) {
NSLog(@"歸檔成功!");
} else {
NSLog(@"歸檔失敗!");
}
}
- (4).沙盒復(fù)雜對象的讀取(例:Student)
-(Student *)getStudent {
// 獲取Documents文件目錄
NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
// 拼接文件目錄
NSString *filePath = [docPath stringByAppendingPathComponent:@"student.txt"];
// 讀取文件成為data對象
NSMutableData *data = [NSMutableData dataWithContentsOfFile:filePath];
// 反歸檔器聲明
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
// 進(jìn)行反歸檔
Student *student = [unarchiver decodeObjectForKey:@"student"];
// 結(jié)束反歸檔
[unarchiver finishDecoding];
return student;
}
- 4.NSFileManager的使用
-(void)testFileManager {
// 創(chuàng)建一個NSFileManager對象(操作文件只用一個fileManager對象即可,使用單例方法)
NSFileManager *fileManager = [NSFileManager defaultManager];
// Documents文件路徑
NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
// 具體文件路徑
NSString *filePath = [docPath stringByAppendingPathComponent:@"file.txt"];
// 寫入的內(nèi)容
NSString *writeStr = @"Hello,this is Carson!";
// 準(zhǔn)換成為NSData類型對象
NSData *dataWrite = [writeStr dataUsingEncoding:NSUTF8StringEncoding];
// 創(chuàng)建一個文件并寫入數(shù)據(jù)
BOOL flag = [fileManager createFileAtPath:filePath contents:dataWrite attributes:nil];
// 判斷
if (flag) {
NSLog(@"寫入成功!");
} else {
NSLog(@"寫入失敗!");
}
// 讀取數(shù)據(jù)
NSData *dataRead = [fileManager contentsAtPath:filePath];
// 將其轉(zhuǎn)換成為NSString類型輸出
NSString *readStr = [[NSString alloc] initWithData:dataRead encoding:NSUTF8StringEncoding];
// 控制臺是輸出
NSLog(@"%@",readStr);
// 判斷文件是否存在
BOOL result1 = [fileManager fileExistsAtPath:filePath];
if (result1) {
NSLog(@"文件存在!");
} else {
NSLog(@"文件不存在!");
}
// 拷貝文件到tmp文件夾下
NSString *tmpPath = NSTemporaryDirectory();
// 拷貝文件地址
NSString *fileCpyPath = [tmpPath stringByAppendingPathComponent:@"file.txt"];
// 錯誤信息
NSError *error = nil;
BOOL result2 = [fileManager copyItemAtPath:filePath toPath:fileCpyPath error:&error];
if (result2) {
NSLog(@"文件拷貝成功!");
} else {
NSLog(@"文件拷貝失敗!");
}
// 比較兩個文件內(nèi)容是否相同
BOOL result3 = [fileManager contentsEqualAtPath:filePath andPath:fileCpyPath];
if (result3) {
NSLog(@"文件內(nèi)容一致!");
} else {
NSLog(@"文件內(nèi)容不一致!");
}
// 創(chuàng)建文件夾
NSError *error1 = nil;
BOOL result4 = [fileManager createDirectoryAtPath:tmpPath withIntermediateDirectories:YES attributes:nil error:&error1];
if (result4) {
NSLog(@"創(chuàng)建文件夾成功!");
} else {
NSLog(@"創(chuàng)建文件夾失敗!");
}
}
- 5.NSFileHandle的使用
- 6.NSDate與NSString的相互轉(zhuǎn)化
-(NSString *)dateToString:(NSDate *)date {
// 初始化時間格式控制器
NSDateFormatter *matter = [[NSDateFormatter alloc] init];
// 設(shè)置設(shè)計(jì)格式
[matter setDateFormat:@"yyyy-MM-dd hh:mm:ss zzz"];
// 進(jìn)行轉(zhuǎn)換
NSString *dateStr = [matter stringFromDate:date];
return dateStr;
}
-(NSDate *)stringToDate:(NSString *)dateStr {
// 初始化時間格式控制器
NSDateFormatter *matter = [[NSDateFormatter alloc] init];
// 設(shè)置設(shè)計(jì)格式
[matter setDateFormat:@"yyyy-MM-dd hh:mm:ss zzz"];
// 進(jìn)行轉(zhuǎn)換
NSDate *date = [matter dateFromString:dateStr];
return date;
}
- 7.CoreDate持久化數(shù)據(jù)與讀取的過程
持久化數(shù)據(jù)過程:context上下文將對被管理對象的子類進(jìn)行的所有的操作(增加布讹、刪除、更新等等)進(jìn)行持久化的時候(調(diào)用save方法的時候),將所有的操作交給持久化數(shù)據(jù)協(xié)調(diào)器亥揖,持久化數(shù)據(jù)協(xié)調(diào)器會將對象類型的數(shù)據(jù)轉(zhuǎn)換為二進(jìn)制類型兄墅,然后存儲到文件系統(tǒng)中桌粉。
讀取過程:持久化數(shù)據(jù)協(xié)調(diào)器從文件系統(tǒng)中讀取出二進(jìn)制數(shù)據(jù)哨颂,根據(jù)實(shí)體對象轉(zhuǎn)換為對應(yīng)的對象類型车柠,將轉(zhuǎn)換好的數(shù)據(jù)交給上下文操作瓷患。