OC第八天笔记2016年03月23日(周三)A.M

1.     NSFileManager:

----------------------main---------------------------

  1 <font size="3">#import <Foundation/Foundation.h>
  2 #import "Student.h"
  3 int main(int argc, const char * argv[]) {
  4     @autoreleasepool {
  5
  6         //1. NSFileManager:文件管理器类(用于管理文件或者目录)
  7         //2. 文件路径:用字符串存储
  8         //3. 文件路径:绝对路径、相对路径。
  9
 10         //4.NSCoding协议:将数据持久化(即将内存中的数据保存到文件)
 11         //5. NSCoder的派生类:NSKeyedArchiver、NSKeyedUnarchiver
 12
 13         Student* s = [[Student alloc] initWithName:@"张三" andAge:20];
 14         Student* s1 = [[Student alloc] initWithName:@"李四" andAge:21];
 15         Student* s2 = [[Student alloc] initWithName:@"王五" andAge:22];
 16
 17         //将学生s信息持久化(保存在文件中)二进制文件 xml文件 json文件 数据库文件
 18
 19         //5.1 NSKeyedArchiver  归档
 20         [NSKeyedArchiver archiveRootObject:s toFile:@"a.txt"];
 21
 22         //集合:注意,集合以及几个内对象所属类中需要遵循NSCoding协议并实现方法。
 23         NSMutableArray* array = [[NSMutableArray alloc] initWithObjects: s, s1, s2, nil];
 24         [NSKeyedArchiver archiveRootObject:array toFile:@"b.txt"];
 25
 26         NSArray* array1 = [NSArray arrayWithObjects:@"Hello",@"World",nil];
 27         [NSKeyedArchiver archiveRootObject:array1 toFile:@"c.txt"];
 28         //如果即将归档的集合元素所属类中没有遵循NSCoding协议,程序会出现崩溃。
 29
 30         //5.2 NSKeyedUnarchiver 解档
 31         id object = [NSKeyedUnarchiver unarchiveObjectWithFile:@"b.txt"];
 32         //参数文件路径(文件需要存在)返回值:存储在文件中的数据
 33         if ([object isKindOfClass:[NSMutableArray class]]) {
 34             for (id astudent in object) {
 35                 NSLog(@"%@",astudent);
 36                 [astudent print];
 37             }
 38         }
 39
 40         [array release];
 41         [s dealloc];
 42         [s1 dealloc];
 43
 44         // /Users/fang/a.txt
 45         NSFileManager* fm = [NSFileManager defaultManager];
 46         //6. 文件管理器类对象
 47
 48         NSString* path = NSHomeDirectory();
 49         NSLog(@"path:%@",path);
 50         [path stringByAppendingPathComponent:@"a.txt"];
 51         //用于追加路径组成部分,分隔符/会自动添加
 52 //        [pathstringByAppendingFormat:@"/a.txt"];
 53 //        //用于实现字符串的追加,分隔符/需要手动添加
 54
 55         //7. 创建文件
 56         //参数一:文件路径 参数二:文件内容 参数三:文件属性
 57         BOOL y = [fm createFileAtPath:path contents:nil attributes:nil];
 58         //@"/Users/fang/a.txt" 硬编码路径(尽量不使用)
 59         if (y) {
 60             NSLog(@"文件创建成功");
 61         }
 62
 63         //8. 判断指定文件是否存在
 64         y = [fm fileExistsAtPath:@"a.txt"];//参数:文件路径
 65         if (y) {
 66             NSLog(@"文件在当前目录中存在!");
 67         }
 68         else
 69             NSLog(@"文件在当前目录中不存在!");
 70         //用途:用作文件内容拷贝
 71         NSError* error;
 72
 73         //9. 判读文件是否存在 存在先删除目的文件再拷贝
 74         if ([fm fileExistsAtPath:@"ac.txt"]) {
 75             [fm removeItemAtPath:@"ac.txt" error:&error];
 76         }
 77         //10. 文件内容拷贝
 78         //a.txt 单个学生的信息。
 79         y = [fm copyItemAtPath:@"a.txt" toPath:@"ac.txt" error:&error];
 80         //参数一:源文件路径  参数二:目的文件路径  参数三: 接收错误
 81         if (y) {
 82             NSLog(@"文件拷贝成功!");
 83         }
 84         else
 85             NSLog(@"文件拷贝失败!");
 86         Student* ac = [NSKeyedUnarchiver unarchiveObjectWithFile:@"ac.txt"];
 87         [ac print];
 88         //如果目的文件已存在,则拷贝失败。解决方案 :先判断目的文件是否存在 然后删除目的文件,再进行拷贝
 89
 90         /*
 91
 92         BOOL y1 = [fmfileExistsAtPath:@"a.txt"];
 93         BOOL y2 = [fmfileExistsAtPath:@"ac.txt"];
 94         if (!y1  || y2) {
 95             if(!y1)
 96             {
 97                 //创建源文件
 98             }
 99             else
100             {
101                 //删除目的文件
102             }
103         }
104         */
105     }
106     return 0;
107 }</font>

----------------------Student.h---------------------------

 1 #import <Foundation/Foundation.h>
 2 @interface Student : NSObject
 3 {
 4     NSString* name;
 5     int age;
 6 }
 7 @property(nonatomic,retain)NSString* name;
 8 @property(nonatomic,assign)int age;
 9 -(id)initWithName:(NSString*)_name andAge:(int)_age;
10 -(void)print;
11 @end

----------------------Student.m---------------------------

 1 <font size="3">#import "Student.h"
 2 @implementation Student
 3 @synthesize name,age;
 4 - (id)initWithCoder:(NSCoder *)aDecoder
 5 {
 6     if(self = [super init]){
 7         self.name = [aDecoder decodeObjectForKey:@"NAME"];//键必须与编码时指定的键一致。
 8         self.age = [[aDecoder decodeObjectForKey:@"AGE"] intValue];
 9     }
10     return self;
11 }
12 -(id)initWithName:(NSString*)_name andAge:(int)_age
13 {
14     if (self = [super init]) {
15         self.name = _name;
16         self.age = _age;
17     }
18     return self;
19 }
20 //将本类对象进行编码(二进制)
21 -(void)encodeWithCoder:(NSCoder*) aCoder
22 {
23     //编码 对对象进行编码:本质就是对对象的实例变量进行编码。
24     [aCoder encodeObject:self.name forKey:@"NAME"];//键值编码
25     [aCoder encodeObject:[NSNumber numberWithInt:self.age] forKey:@"AGE"];
26 }
27 -(void)print
28 {
29     NSLog(@"name%@  age:%d",name,age);
30 }
31 -(void)dealloc
32 {
33     [name release];
34     [super dealloc];
35 }
36 @end
37 </font>

时间: 2024-10-13 22:00:37

OC第八天笔记2016年03月23日(周三)A.M的相关文章

OC第九天笔记2016年03月24日(周四)A.M

1.  打开ARC:-fobjc-arc 关闭ARC:-fno-objc-arc 2.  在ARC中内存回收由编译器完成 声明对象之后,未将对象置为nil,则对象作用域结束时,空间才会被回收:如果将对象置为nil,则对象的空间会立即回收. 3.  __strong __weak __strong:强引用,拥有某一块堆空间的所有权.默认. __weak:弱引用,仅拥有使用权. 一旦强引用置为nil,弱引用会被自动置为nil. 声明属性:如果属性为对象实例变量,赋值方式strong,否则使用weak

OC第七天笔记2016年03月22日(周二)A.M

1. 可变字符串 NSMutableString* mstr = [[NSMutableString alloc] initWithCapacity:10]; 增 删 改 替换 //[mstr length] [mstr insertString:@"http://" atIndex:0]; //第一个参数:即将要插入的字符串 //第二个参数:插入的位置(下标) NSLog(@"%@",mstr); //http://www.baidu.com [mstr inse

OC第六天笔记2016年03月21日(周一)A.M

在OC中,我们通过使用协议和分类来实现多继承的效果. 协议只能声明方法,而不能有任何实例变量. 声明协议: @protocal protocolName<protocol ,…> @optional //可选择的 @require//必须的  默认 @end eg: 1 @protocal rules<NSObject > 2 3 4 5 @interface abc: NSObject <rules> 6 7 @end //协议中只有方法声明,没有实例变量 在类中的实

OC第四天笔记2016年03月18日(周五)A.M

在OC中没有多继承 继承方式公有继承:派生类对象可以当做基类对象来使用 类中实例变量的默认权限为受保护,方法默认权限公有. 类中方法都是虚方法 在OC继承中,基类的所有成员都可以被派生类继承. 在派生类中定义一个原型和基类相同的方法,称派生类重写了此方法. id代表任意类型, 在程序运行期间才会确定id所代表的类型. 使用类方法创建的对象会被自动放入“自动释放池”中,所以不需要再手动release. 派生类中扩展实例变量时,不能与基类部分实例变量同名.

OC第七天笔记2016年03月21日(周一)P.M

1. 使用NsCompare 或者isEqualToNumber来实现NsNumber对象的比较. NsCompare:比较大小关系 isEqualToNumber:是否相等 长度:[str length] 查找子串: NSRange rr = [str rangeOfString:@”ll”]; If(rr.location == NSNotFound){ NSLog(@”ll is not in str ”); } else { NSLog(@”ll is in str”);}

C++第八天笔记2016年02月25日(周四)A.M

1.    继承:一个类A可以继承另一个类B,那么我们称类B为基类(父类),类A为派生类 (子类). 2.    派生类从基类继承了所有成员,除了构造函数.析构函数.=函数. 3.    基类的私有成员,虽然它们也是派生类的私有成员,但是不能在派生类中定义的成员函数访问.这些基类的私有成员只能通过基类的公有成员函数访问. 4.    子类可以自己实现与父类成员函数原型相同(函数名.参数列表)的成员函数,称为覆盖.覆盖是函数重载的特例,覆盖一定是发生在继承的过程中. 在子类中调用被覆盖的父类版本的

C++第十四天笔记2016年03月10日(周四) A.M

1. 线性结构:链表和数组 数组:可以访问任意位置的元素.添加删除操作相对麻烦. 链表:添加删除效率相对较高.只能从第一个元素开始访问. 访问较多:数组.添加删除较多:链表. 数组:元素类型 数组名[元素个数]; 2.  如何创建链表: 链表:链表中的每一个元素称为节点. 节点:数据域(存储数据)和指针域(存储下一节点的地址编号). 3.  双向链表:数据域和指针域(包含两个,其中一个指向下一个节点,另外一个指向上一个节点) 4.  头结点:链表中的第一个节点 空链表:链表中无任何节点. 1 #

C语言第八天笔记2016年01月22日(周五)A.M

1. 作用域: 静态全局变量与普通全局变量:前者的作用域缩小,生命周期相同. 静态局部变量与普通局部变量:前者的生命周期延长,作用域相同. 2. 函数指针: int (*func_ptr)(int,float*);//声明函数指针. int exchange(int,float*); exchange(1,p); func_ptr(1,p); 3. 数组指针.指针数组 指针数组:char* s[10]; int* a[10];(数组,数组中的元素都是指针类型). 数组指针: int* p;//整

C++第十二天笔记2016年03月04日(周五) A.M

1.    多重继承 在多继承中,如果派生类的多个基类出现重名函数,为了避免出现歧义,则可以在派生类中重写这些重名函数. 2.    菱形继承问题,成员冗余(成员变量的冗余,无问题.成员函数的冗余,可能会出现问题).函数调用出现歧义. 使用虚继承解决菱形继承问题. 3.    模板 函数模板:有类型参数的函数. 如何定义函数模板: 1 template <typename T> 2 void print(T,_t) 3 { 4 cout<< _t << endl; 5