黑马程序员--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>
- 黑马程序员--iOS--Objective-C基础 (Foundation框架 二)
- 黑马程序员--iOS--Objective-C基础 (Foundation框架 一 )
- 黑马程序员---Objective-C Foundation框架学习笔记之二
- 黑马程序员--Objective-C——Foundation框架二
- 黑马程序员——ios基础---Objective-C:Foundation
- 黑马程序员:Objective-C Foundation框架
- 黑马程序员——IOS基础(Foundation框架二)
- 黑马程序员-iOS基础-Foundation框架基础
- 黑马程序员---iOS基础---Foundation框架
- 黑马程序员-iOS基础-Objective-C基础(二)
- 黑马程序员---Objective-C Foundation
- 黑马程序员--iOS--Objective-C基础 (内存管理二)
- 黑马程序员--Objective-C——Foundation框架一
- Objective C Foundation基础框架
- Objective C Foundation基础框架
- 黑马程序员----foundation框架基础
- 黑马程序员--Foundation框架基础
- 黑马程序员--iOS--Objective-C基础 (一)
- android studio学习(1)
- Ajax工作原理
- 计蒜客 难题题库 004 简单斐波那契
- cJSON学习笔记1
- 1144 农场灌溉
- 黑马程序员--iOS--Objective-C基础 (Foundation框架 二)
- 108. Convert Sorted Array to Binary Search Tree
- 【华为oj】蛇形矩阵
- JQuery之选择器
- style.height、offsetHeight、clientHeight、scrollHeight的区别
- 剑指offer——旋转数组的最小数字
- 计蒜客 难题题库 005 矩阵翻转
- Java图形化界面
- cJSON学习笔记2