IOS基础之Foundation框架常用类NSFileManager,DSDate,CGPoint,CGSize,copy,单例
生活随笔
收集整理的這篇文章主要介紹了
IOS基础之Foundation框架常用类NSFileManager,DSDate,CGPoint,CGSize,copy,单例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
IOS基礎之Foundation框架常用類NSFileManager,DSDate,CGPoint,CGSize,copy,單例
1.01_FileManager學習
// // main.m // 01_FileManager學習 // // Created by 魯軍 on 2021/4/24. //#import <Foundation/Foundation.h> #define LogBOOL(val) NSLog(@"%@", val==YES?@"YES":@"NO")int main(int argc, const char * argv[]) {//文件管理員NSFileManager *manager = [NSFileManager defaultManager];//刪除文件//BOOL res =[manager removeItemAtPath:@"/Users/lujun/Desktop/aa.txt" error:nil];// LogBOOL(res);//重命名 移動過程中換名字/* BOOL res1 =[manager moveItemAtPath:@"/Users/lujun/Desktop/aa.txt" toPath:@"/Users/lujun/Desktop/xxx.txt" error:nil];LogBOOL(res1);*///移動文件/* BOOL res2 =[manager moveItemAtPath:@"/Users/lujun/Desktop/aa.txt" toPath:@"/Users/lujun/Desktop/test/aa.txt" error:nil];LogBOOL(res2);*///拷貝文件/* BOOL res3= [manager copyItemAtPath:@"/Users/lujun/Desktop/aaa.txt" toPath:@"/Users/lujun/Desktop/test/aaa.txt" error:nil];LogBOOL(res3);*///1NO 是 只創建一層,前面文件夾必須存在,否則創建失敗//YES 是一路創建/* BOOL res4 = [manager createDirectoryAtPath:@"/Users/lujun/Desktop/AA/BB/CC/dd" withIntermediateDirectories:YES attributes:nil error:nil];if(res4){NSLog(@"成功!");}else{NSLog(@"失敗");}*///創建文件并寫入NSString *str = @"我最愛北京天安門";NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];NSLog(@"%@",data);BOOL res5 = [manager createFileAtPath:@"/Users/lujun/Desktop/hahaa.txt" contents:data attributes:nil];if(res5==YES){NSLog(@"成功!");}else{NSLog(@"失敗!");}return 0; }02_FileManager文件終結者案例
// // main.m // 02_FileManager文件終結者案例 // // Created by 魯軍 on 2021/4/24. //#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) {while(1){NSFileManager *fileManager = [NSFileManager defaultManager];NSString *path= @"/Users/lujun/Desktop/aaa/";NSArray *arr =[ fileManager contentsOfDirectoryAtPath:path error:nil];if(arr.count>0){for(NSString *p in arr){NSString *newP = [NSString stringWithFormat:@"%@%@",path,p];if([fileManager isDeletableFileAtPath:newP]){[fileManager removeItemAtPath:newP error:nil];}}}[NSThread sleepForTimeInterval:4];}return 0; }03-NSDate學習
// // main.m // 03-NSDate學習 // // Created by 魯軍 on 2021/4/24. //#import <Foundation/Foundation.h> #import "NSDate+itcash.h" int main(int argc, const char * argv[]) {/*NSDate *date = [NSDate new];NSLog(@"%@",date);//1 先創建1個日期格式化對象,這個對象可以將1個日期輸出為指定的格式NSDateFormatter *formatter = [NSDateFormatter new];formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";//3 按格式化對象按照指定的格式將日期對象轉化// 轉換的時候會自動的轉換為當前系統的時區的時間NSString *str = [formatter stringFromDate:date];NSLog(@"%@",str);*//* NSDate *date = [NSDate new];NSDateFormatter *formatter = [NSDateFormatter new];formatter.dateFormat = @"yy-MM-dd HH:mm:ss";NSString *str= [formatter stringFromDate:date];NSLog(@"%@",str);*///字符串轉對象/* NSString *strDate = @"2011年12月12號 12時12分13秒";//先創建一個日期格式化對象NSDateFormatter * formatter2 = [NSDateFormatter new];//2 指定字符串日期格式formatter2.dateFormat = @"yyyy年MM月dd號 MM時mm分ss秒";//3.轉換NSDate *date1 = [formatter2 dateFromString:strDate];NSLog(@"%@",date1);*///計算時間/* NSDate *date2 = [NSDate new];NSLog(@"%@",date2);//5000秒以后,在當前 時間的基礎上NSDate *date3 = [NSDate dateWithTimeIntervalSinceNow:8*60*60];//單位是秒//得到東八區的時間,只需要在原有的基礎上增加8個小時,即可。// NSDate dateWithTimeIntervalSinceNow 取得的是格林威治時間NSLog(@"%@",date3);*///時間的相減/* NSString *str1 = @"";NSDate * startDate = [NSDate date];for(int i=0;i<20000;i++){str1 = [NSString stringWithFormat:@"%@%d",str1,i];}NSDate * endDate = [NSDate date];double sj = [endDate timeIntervalSinceDate:startDate];NSLog(@"經歷的時間是:%lf",sj); //0.564000 20000次循環的是時間是 0.794788*///只要年份字符串/* NSDate *date4 = [NSDate date];NSDateFormatter *formatter1 = [NSDateFormatter new];formatter1.dateFormat = @"yyyy";NSString *str2= [formatter1 stringFromDate:date4];int year = str2.intValue;NSLog(@"%d",year); //2021*///利用日歷對象拿到年月日字符串/*NSDate *date5 = [NSDate date];//先創建一個日歷對象 日歷對象的作用,可以從日期對象中取到日期對象的各個部分NSCalendar *calendar = [NSCalendar currentCalendar];//2.讓日歷對象從日期對象取出日期的各個部分NSDateComponents *com =[calendar components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitWeekday fromDate:date5];NSLog(@"%lu------%lu-------%lu-------%lu",com.year,com.month,com.day,com.weekday);//星期7即是中國人的星期六*///對于分類的使用測試代碼/***/NSDate *date = [[NSDate alloc] init];NSLog(@"%d",date.year);//2021-04-24 18:44:49.903851+0800 03-NSDate學習[5164:148167] 2021return 0; } // // NSDate+itcash.m // 03-NSDate學習 // // Created by 魯軍 on 2021/4/24. //#import "NSDate+itcash.h"@implementation NSDate (itcash) - (int)year{NSCalendar *calendar = [NSCalendar currentCalendar];//2.讓日歷對象從日期對象取出日期的各個部分NSDateComponents *com =[calendar components:NSCalendarUnitYear fromDate:self];return (int)com.year; } @end4.copy的使用解釋
// // main.m // copy的使用解釋 // // Created by 魯軍 on 2021/4/24. ///*1.無論在MRC還是ARC下的 如果屬性是NSString的屬性的 @property的屬性寫的是copy2. copy 復制1)copy是一個方法 定義在NSObject的類之中的 作用 ,拷貝對象。NSString ------------>copy --------->沒有產生新對象 ,而是直接將對象的本身的對象地址返回 ,這種拷貝叫做淺拷貝NSMutableString 有產生的新的對象,這種拷貝叫做深拷貝,拷貝的字符串不可變的對象,深拷貝2) mutableCopy 定義在NSMutableStringNSString -------------> mutableCopy 可變字符串對象, 深拷貝NSMutableString -------------> mutableCopy 出來的是一個可變字符串對象 深拷貝這是字符串的拷貝特點3若字符串對象存儲在常量區 存儲在常量區的數據是不允許回收的所以存儲子啊常量區的字符串的引用計數都是1個超大的數,并且retain 和 release都無效2) 若字符串存在堆區 這個字符串的對象的和普通的對象是一樣的,引用計數器是1NSString *str = [NSString stringWithFormat:@"jack"];NSString *str2=[str copy];NSMutableString *mStr = [NSMutableString]NSLog(@"%u",str.retainCount); //1 **/#import <Foundation/Foundation.h> #import "Person.h" int main(int argc, const char * argv[]) {Person *p1 = [Person new];//需求將str賦值給p1.name 屬性以后//再修改str的值 不要影響p1.name//解決 在setter 方法賦值的時候,將傳進來的對象先考鋇一份NSMutableString *str = [NSMutableString stringWithFormat:@"jack"];p1.name =str;[str appendString:@"rose"];NSLog(@"p1.name = %@",p1.name); //jackrose/*Person *p1 = [Person new];NSString *str = @"jack";p1.name = str;str = @"rose";NSLog(@"p1.name = %@",p1.name); // p1.name = jack*//*NSString *str1= @"jack";NSString *str2 = [str1 copy];NSLog(@"%@",str1);NSLog(@"%@",str2);NSLog(@"str1 = %p",str1);NSLog(@"str2 = %p",str2);NSMutableString *str3 = [NSMutableString stringWithFormat:@"jack"];NSMutableString *str4 = [str3 copy];NSLog(@"%@",str3);NSLog(@"%@",str4);NSLog(@"str1 = %p",str3); //地址不一致NSLog(@"str2 = %p",str4); //地址不一致// [str2 appendString:@"jjj"]; //報錯NSString *str5 = @"jack";NSMutableString *str6 = [str1 mutableCopy];*/return 0; } // // Person.h // copy的使用解釋 // // Created by 魯軍 on 2021/4/24. //#import <Foundation/Foundation.h>NS_ASSUME_NONNULL_BEGIN@interface Person : NSObject //@property(nonatomic,copy)NSString *name; {NSString *_name;}-(void)setName:(NSString*)name; -(NSString *)name; @endNS_ASSUME_NONNULL_END // // Person.m // copy的使用解釋 // // Created by 魯軍 on 2021/4/24. //#import "Person.h"@implementation Person -(void)setName:(NSString*)name{_name = [name copy]; } -(NSString *)name{return _name; } @end05-CGPoint的使用
// // main.m // 05-CGPoint的使用 // // Created by 魯軍 on 2021/4/24. ///*typedef struct {int x;int y; }CZPoint;CZPoint p = {20,30};在Foundation框架中已經定義好了。 struct CGPoint {CGFloat x;CGFloat y; }CGPoint; typedef struct CGPoint CGPoint;CGFloat 類型的數據實際上就是一個double類型的這個結構體一般情況下表示坐標的,用來表示在界面上的位置CGPoint 與NSPoint 都是同一個類型只不過定義兩個名字CGPoint p1;p1.x = 20;p1.y = 30;CGPoint p1 = {20,30};CGPoint p2 = {.x=20,.y=30};4 Foundation 框架中快速創建一個CGPointMake(20,30)NSPoint p2 = NSMakePoint(20,30);2.聲明1個變量來保存控件的大小typedef struct {double width;double height;}CZSize;CZSize size = {50,60};typedef struct CGSize CGSizeCGSize 聲明并初始化的方式CGSize size;size.width = 100;size.height = 30;2) CGSize size = {100,100};3) CGSize size = {.width=100,.height=10};4) CGSize size = CGSizeMake(100,400); CGSizeMake(widht,height); b. NSMakeSize(widht,height);struct CGRect {}CGRectCGRect rect;rect.origin.x = 20;rect.origin.y = 40;rect.size.height = 30;rect.size.width = 100;NSRect 和 CGRect是一樣的CGRect的聲明和初始化1)CGRect rect;rect.origin.x = 20;rect.origin.y = 40;rect.size.height = 30;rect.size.width = 100;2)CGRect rect;rect.origin= (CGPoint){10,20}; //強轉 成CGPointrect.size = (CGSize){800,600};//數組 3) CGRectMake(10,20,30,45);NSMakeRect(30,40,50,60);使用的時候 使用 CGSize NSSize Core Graphics */ #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) {CGPoint p1 = CGPointMake(20,30);NSLog(@"p1.x = %lf . p1.y = %lf",p1.x,p1.y);NSPoint p2 = NSMakePoint(20,30);CGSize size1 = CGSizeMake(10,50);CGSize size = NSMakeSize(100,500);return 0; }06-NSValue使用
// // main.m // 06-NSValue使用 // // Created by 魯軍 on 2021/4/24. //#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) {/* CGSize s1 = CGSizeMake(10,10);CGSize s2 = CGSizeMake(20,30);CGSize s3 = CGSizeMake(30,45);CGSize s4 = CGSizeMake(85,96);NSValue *v1 = [NSValue valueWithSize:s1];NSValue *v2 = [NSValue valueWithSize:s2];NSValue *v3 = [NSValue valueWithSize:s3];NSValue *v4 = [NSValue valueWithSize:s4];NSArray *arr = @[v1,v2,v3,v4];for(NSValue *v in arr){NSLog(@"%@",NSStringFromSize(v.sizeValue));}*/CGPoint p1 = CGPointMake(10,20);CGPoint p2 = CGPointMake(20,30);CGPoint p3 = CGPointMake(40,50);CGPoint p4 = CGPointMake(60,60);NSValue *v1 = [NSValue valueWithPoint:p1];NSValue *v2 = [NSValue valueWithPoint:p2];NSValue *v3 = [NSValue valueWithPoint:p3];NSValue *v4 = [NSValue valueWithPoint:p4];NSArray *arr =@[v1,v2,v3,v4];for(NSValue *v in arr){NSLog(@"%@",NSStringFromPoint(v.pointValue));}return 0; }07-自定義類實現拷貝
// // main.m // 07-自定義類實現拷貝 // // Created by 魯軍 on 2021/4/24. // /**1 copy 方法的確 是定義在BNSObject 類中一個方法copy方法的內部調用了另外1個方法,copyWithZone這個方法 是定義在NSCoping 協議之中的因為我們的類沒有遵守NSCoping 協議,那么我們的類中就沒有copingWithZone 這個方法所以當我們 自定義 的類調用copy方法的時候就會出錯2如果我們想要讓我們自己的惡類具備對象拷貝的能力,那么就讓我們的類遵守NSCoping協議并實現copingWithZone 這個方法如果想要實現深拷貝,那么重新創建1個對象,并將對象的屬性的值復制,返回如果想要實現淺拷貝。 那么就直接返回self */ #import <Foundation/Foundation.h>#import "Person.h" int main(int argc, const char * argv[]) {Person *p1 = [Person new];Person* p2 = [p1 copy];NSLog(@"%p",p1);NSLog(@"%p",p2);return 0; } // // Person.h // 07-自定義類實現拷貝 // // Created by 魯軍 on 2021/4/24. //#import <Foundation/Foundation.h>NS_ASSUME_NONNULL_BEGIN@interface Person : NSObject <NSCopying> @property(nonatomic,assign)int age; @property(nonatomic,copy)NSString *name; @endNS_ASSUME_NONNULL_END // // Person.m // 07-自定義類實現拷貝 // // Created by 魯軍 on 2021/4/24. //#import "Person.h"@implementation Person- (id)copyWithZone:(NSZone *)zone{//1 如果要做深拷貝 你就重新創建1個對象// 把對象的屬性的值復制到新的對象中 將對象返回Person *p1 = [Person new];p1.name = _name;p1.age = _age;return p1; //地址改變//上述是深拷貝// return self; //淺拷貝 地址不變 }@end08-單例模式
// // main.m // 08-單例模式 // // Created by 魯軍 on 2021/4/24. ///**什么是單例模式 1. 1個類的對象,無論在何時創建也無論在什么地方創建,也無論創建多少次,創建出來的都是同一個對象2. 無論如何創建對象,最終 都會調用alloc 方法來創建對象歷史原因,alloc 創建對象最終調用的都是 allocWithZone 方法我們需要重寫 allocWithZone3.要實現單里模式重寫 +allocWithZone + (instancetype)allocWithZone:(struct _NSZone *)zone{static id instance = nil;if(instance==nil){instance = [super allocWithZone:zone];}return instance; }4. 單里模式規范必須提供1個類方法,shared類名 開頭 都是單里模式defaule類名。5 什么時候要把類搞成單里單例對象可以共享,存儲在單例對象中的數據的可以被共享也就是無論在什么地方創建單利對象 訪問的都是同1個對象*/#import <Foundation/Foundation.h> #import "Person.h" int main(int argc, const char * argv[]) {Person *p1 = [[Person alloc] init];Person *p2 = [Person new];Person *p3 = [Person new];Person *p4 = [Person new];NSLog(@"%p",p1);NSLog(@"%p",p2);NSLog(@"%p",p3);NSLog(@"%p",p4);return 0; } // // Person.h // 08-單例模式 // // Created by 魯軍 on 2021/4/24. //#import <Foundation/Foundation.h>NS_ASSUME_NONNULL_BEGIN@interface Person : NSObject@endNS_ASSUME_NONNULL_END // // Person.m // 08-單例模式 // // Created by 魯軍 on 2021/4/24. //#import "Person.h"@implementation Person + (instancetype)allocWithZone:(struct _NSZone *)zone{// NSLog(@"哈哈哈哈"); // return nil; // return [super allocWithZone:zone];static id instance = nil;if(instance==nil){instance = [super allocWithZone:zone];}return instance; } @end 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的IOS基础之Foundation框架常用类NSFileManager,DSDate,CGPoint,CGSize,copy,单例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于OpenCL的mean filter
- 下一篇: Google编程之夏入围项目公布