黑马程序员--iOS--Objective-C基础 (Foundation框架 二)

来源:互联网 发布:在app里找淘宝官方客服 编辑:程序博客网 时间:2024/05/01 19:18

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

NSFileManager 的介绍和用法

NSFileManager  是用来管理文件系统的

它可以用来进行常见的文件\文件夹操作(拷贝\剪切\创建)

NSFileManager  使用了单例模式singleton

使用defaultManager 方法可以获得那个单例对象  [NSFileManager   defaultManager  ];

<span style="font-size:12px;">#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) {    @autoreleasepool {               //        NSFileManager  用于判断                NSString  *filepath = @"/Users/Y_sir/Desktop/url1.txt";                NSString  *filepath1 = @"/Users/Y_sir/Desktop";//        1)文件是否存在                //单例对象  在程序运行期间 ,是有一个对象存在        NSFileManager  *file = [NSFileManager  defaultManager];                BOOL exist = [file  fileExistsAtPath:filepath];        if (exist) {            NSLog(@"file exist");        }//        2)文件是否是一个目录        //        file   fileExistsAtPath:filepath  isDictionary:&is//        3)文件是否可读                exist = [file isReadableFileAtPath:filepath];                NSLog(@"exist = %d",exist);//        4)文件是否可写                 exist = [file isWritableFileAtPath:filepath];                NSLog(@"exist = %d",exist);//        5)文件是否可删除                exist = [file isDeletableFileAtPath:filepath1];                 NSLog(@"exist = %d",exist);       }    return 0;}</span>
NSFileManager 对文件的操作

<span style="font-size:12px;">#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) {    @autoreleasepool {             //创建目录                NSFileManager  *fm = [NSFileManager   defaultManager];//        NSString  *createfile = @"/Users/Y_sir/Desktop/NSFileManager/aaaa/cccc";//       BOOL createbyme =  [fm createDirectoryAtPath:createfile withIntermediateDirectories:YES attributes:nil error:nil];        if (createbyme) {            NSLog(@"create file  successed !");        }                //创建文件                NSString  *str = @"我的去 ,好大风";                 NSString  *createfile1= @"/Users/Y_sir/Desktop/NSFileManager/aaaa/cccc/yanghong.txt";        //    NSData  是一个处理二进制数据的类                NSData *data = [str  dataUsingEncoding:NSUTF8StringEncoding];                         BOOL  aa   =  [ fm createFileAtPath:createfile1 contents:data attributes:nil];                if (aa) {                        NSLog(@"创建成功");                }else{                    NSLog(@"创建失败");                }                //copy move 文件              NSString *createfile2 = @"/Users/Y_sir/Desktop/NSFileManager/aaaa/cccc/yanghong.txt";          BOOL  bb=  [fm  copyItemAtPath:createfile2 toPath:createfile1 error:nil];                if (bb) {                        NSLog(@"创建成功");                    }else{                        NSLog(@"创建失败");                    }       //栓删除文件                            }    return 0;}</span>
NSNumber 的使用

NSArray NSDictionary 只能存放OC对象,不能存放 int \float \double等基本数据类型,如果需要把基本数据类型放进数组或字典中,需要先把基本数据类型包装成OC对象

NSNumber 的创建和使用

<span style="font-size:12px;">#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) {    @autoreleasepool {        //    NSNumber  是OC中处理数据类型的一个类                int a=10;                float f = 3.14f;               NSNumber *intobj = [NSNumber  numberWithInt:a];        //        NSArray  *array = [NSArray  arrayWithObjects:intobj, nil];             NSMutableArray  *array = [NSMutableArray  arrayWithObjects:intobj, nil];        NSLog(@"array = %@",array);                  NSNumber *floatobj = [NSNumber  numberWithInt:f];                [array  addObject:floatobj];                     NSLog(@"array = %@",array);        //        NSNumber *n1 = array[0];//        int a1 =[n1 intValue];        //        NSNumber *n2 = array[1];//        float f1 =[n2 floatValue];        //        NSLog(@"%.2f",a1 + f1);//   [array[0] intValue] + [array[1]  floatValue];                int b =  [array[0] intValue] + [array[1]  floatValue];           NSLog(@"%d",b);            }    return 0;}</span>
NSValue 的介绍和使用

NSNumber 是NSValue 的子类,NSValue 主要是把指针,CGRect 等结构体包装成OC对象,以便储存。

<span style="font-size:12px;">#import <Foundation/Foundation.h>void test (){    //创建一个结构体变量    //p1是   CGPoint 类型的结构体变量    CGPoint  p1 = CGPointMake(20, 30);    NSRect  r1 = NSMakeRect(0, 0, 100, 100);        NSMutableArray  *arr = [NSMutableArray  array];        NSValue  *pvalue = [NSValue valueWithPoint:p1];        [arr addObject:pvalue];        [arr addObject:[NSValue   valueWithRect:r1]];        NSLog(@"arr = %@ ",arr);        //取出数组里面的值        NSValue *r1value =[arr  lastObject];        NSRect r2 = [r1value  rectValue];        NSLog(@"%@",NSStringFromRect(r2)); }typedef  struct Date{    int year;        int month;}Mydate;int main(int argc, const char * argv[]) {    @autoreleasepool {        Mydate  md = {2015 ,3};        NSValue *value = [NSValue  valueWithBytes:&md objCType:@encode(Mydate)];                        NSLog(@"%@",value);                   Mydate mmd;        [value getValue:&mmd];                NSLog(@"%d ,%d",mmd.year ,mmd.month);             }    return 0;}</span>
NSDate 的 介绍和使用

NSDate 可以用来表示时间,可以进行一些常见的日期和时间的处理

一个NSDate 对象就代表一个时间

[NSDate date] 返回的就是当前时间

<span style="font-size:12px;">#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) {    @autoreleasepool {                //       获取当前时间        NSDate  *d1 =[NSDate  date];        NSLog(@"%@",d1);//格林威治时间        //        格式化时间                //         NSDateFormatter  日期格式化        NSDateFormatter  *d2 = [NSDateFormatter  new];                d2.dateFormat = @"yyyy-MM-dd HH:mm:ss";                NSString  *d3 = [d2  stringFromDate:d1];                NSLog(@"%@",d3);                //        计算时间                NSTimeInterval  t =60*60*24;                NSDate  *tomorrow = [NSDate  dateWithTimeIntervalSinceNow:t];                NSString *d4 = [d2 stringFromDate:tomorrow];                NSLog(@"%@",d4);        //        日期时间对象的使用//        NSCalendar 可以快速获取年月日      //        NSDate  *d5 =[NSDate  date];//        NSCalendar  *calendar = [NSCalendar  currentCalendar];//         NSDateComponents  *coms = [calendar component:NSCalendarUnitYear fromDate:d5];            }    return 0;}</span>
集合对象的内存管理

当一个对象加入到集合中,那么对象的引用计数 +1

当集合被销毁时,集合会向集合中的元素发送release消息
集合的内存管理细节

1)当一个对象添加到集合中时,这个对象会做一次retain操作,计数器+1

2)当一个被销毁时,会对集合里面的所有对象做一次release操作,计数器-1

3)当一个对象从集合中移除时,这个对象会做一次release操作,计数器-1

普遍规律:

1)如果方法名是add\insert开头,那么被添加的对象,计数器+1

2)如果方法名是remove\delete开头,那么被移除的对象,计数器-1

<span style="font-size:12px;">    //创建对象    Person *p = [Person new];  //1    [p retain];   //2        NSMutableArray *marr = [NSMutableArray array];    [marr addObject:p];        NSLog(@"p.retainCount = %lu",p.retainCount);  //3        [p release];  // 2</span>
copy 概念及入门

对象拷贝的目的: 要使用某个对象的数据,但是在修改对象时不影响原来的对象内容

使用

一个对象可以调用copy或者mutablecopy  方法来创建一个副本对象

copy :创建的是一个不可变副本

mutablecopy   :创建的是可变的副本

使用copy功能的前提:

需要遵守NSCopying协议,实现copyWithZone:方法

格式:

@property NSCopying 

-(void)copyWithZone:(NSZone *)zone;

@end

使用mutableCopy功能的前提:

需要遵守NSMutabelCopying协议,实现mutableCopyWithZone:方法

格式:

@property NSCopying 

-(void)mutableCopyWithZone:(NSZone *)zone;

@end

 自定义类实现copy的功能:

 

   1) 创建一个类

 

   2) 遵守NSCopying协议

<span style="font-size:12px;">#import <Foundation/Foundation.h>@interface Dog : NSObject<NSCopying>@property (nonatomic,assign) int speed;@end</span>

   3) 实现协议中声明的方法

 

<span style="font-size:12px;">#import "Dog.h"@implementation Dog- (id)copyWithZone:(NSZone *)zone{    NSLog(@"实现copy方法");        Dog *d = [[Dog alloc] init];      d.speed = self.speed;    return d;}@end</span>

   4)    [对象 copy  ] 目的:  产生一个副本对象

<span style="font-size:12px;">#import "Dog.h"#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) {    @autoreleasepool {               Dog *d1= [Dog new];        d1.speed = 20;        //对象的copy        //自定义对象的copy都是深拷贝                Dog *d2= [d1 copy];                NSLog(@"%d",d2.speed);            }    return 0;}</span>

单例模式的实现
单例模式的概念:单例模式的意图是类的对象成为系统中唯一的实例。提供一个访问点,供客户类共享。
单例设计模式的要点:

1)某个类只能有一个实例。

2)他必须自行创建这个对象

3)必须自行向整个系统提供这个实例

(4)为了保证实例的唯一性,我们必须将

-(id)copyWithZone:(NSZone *)zone

+(id)allocWithZone:(NSZone *)zone

-(id)retain-(NSUInteger)retainCount

-(oneway void)release
-(id)autorelease
的实现方法进行覆盖。

5)这个方法必须是一个静态类 

代码实现:

Tools.h

<span style="font-size:12px;">#import <Foundation/Foundation.h>@interface Tools : NSObject@property  (nonatomic ,assign) int num;@property (nonatomic  ,copy)  NSString  *text;+(instancetype)shareInstance;@end</span>
Tool.m

<span style="font-size:12px;">#import "Tools.h"//定义一个全局变量static Tools  *instance =nil;@implementation Tools//单例的介入方法的实现+(instancetype)shareInstance{//保证对象必须唯一if (instance == nil){    instance =[[Tools   alloc]  init];            return instance;}return instance;}@end</span>
Person.h

<span style="font-size:12px;">#import <Foundation/Foundation.h>@interface Person : NSObject-(void)run;@end</span>

Person.m

<span style="font-size:12px;">#import "Person.h"#import "Tools.h"@implementation Person-(void)run{     //创建单例对象    Tools *st = [Tools   shareInstance];   //调用set方法    st.num =100;    st.text = @"hello world !";}@end</span>
main.m

<span style="font-size:12px;">#import <Foundation/Foundation.h>#import "Person.h"int main(int argc, const char * argv[]) {    @autoreleasepool {                        Person  *p = [Person  new];                [p  run];            }    return 0;}</span>


------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 吃了海兔的内脏怎么办 吃了鱿鱼的吸盘怎么办 想开个烧烤店没学过怎么办 墨鱼汁弄衣服上怎么办 干鱿鱼泡开发黄怎么办 吃了芥末胃疼怎么办 手撕鱿鱼咸了怎么办 孕妇吃了点芥末怎么办 葡萄酒上面有一层白霉怎么办 手机一不小心把视频删了怎么办 柑橘7月份果实小怎么办 鹦鹉鱼身上有小白点怎么办 鹦鹉鱼身上烂了怎么办 红鹦鹉鱼变黑了怎么办 唱美声总夹嗓子怎么办 发财树树干出褶怎么办 月季花夏天换盆出现黄叶怎么办 刚种的月季枯了怎么办 新买的月季黄叶了怎么办 月季花叶孑轰发黄怎么办? 新种的月季苗弱怎么办? 月季换盆后浇透水叶子黄了怎么办 肉肉移栽后浇透水怎么办 月季花扦插的没长根发芽了怎么办 君子兰发的小苗怎么办 蔷薇光长枝条不开花怎么办 牡丹发芽又干了怎么办 擦皮炎平后皮肤变黑怎么办 误喝发霉的咖啡渣怎么办 狗吃了速溶咖啡怎么办 咖啡机放豆的地方进水怎么办 干吃咖啡粉上瘾怎么办 去良友花艺住宿怎么办 充气娃娃放了气怎么办 煮杜鹃根没有锅怎么办 淘宝店卖鲜花被买家拒收货怎么办 执业医师电子注册忘记密码怎么办 怀孕吃了油炸的怎么办 百合长得太高怎么办 百合的杆没了怎么办 百合花长得太细怎么办