学习笔记16-OCFoundation框架(二)

1     NSDictionary(不可变字典)

 

作用:通过键(key)可能找到对应的值(value)。

特点:键值成对出现  键不能重复 (后添加的不能显示)  键值对是无序的

 

创建字典

1) 创建空字典

NSDictionary  *dic =[ NSDictionary   dictionary];

创建一组键值对的字典

NSDictionary  *dic=[ NSDictionary  dictionaryWithObject:id(value )forKey id(key)];

创建多组键值对的字典

NSDictionary  *dic=[ NSDictionary  dictionaryWithObjectsandKyes:value ,key,value1,key2];   //value和key都是对象成对出现中间用逗号间隔

简写创建字典

NSDictionary  *dic=@{@“key”:@“value”,.......};//

       打印字典

              NSLog(@“%@”,dic); //大括号 数组是小括号。

       常用函数

       count:返回键值对的组数

       objectForKey:id(key):根据键取出值

              for(NSString *key in dic){

             

       NSLog(@“key=%@,vaule = %@”,key[ dic objectForKey:key]);

}

       用block方法取值

              [dic enumerateKeyAndObjectUsingBlock:^(id key),id obj,BOOL*stop]){

NSLog(@“key=%@,vaule = %@”,key,obj);

}];

       简写形式取值

              dic[key];

       写文件

              [dic  writeToFile: 路径automically];

       读文件

              NSDictionary  *dic=[ NSDictionary  dictionaryWithContentsOfFile: 路径];

       使用

              通过字典和数组进行组合可以形成级联

 

              //

// main.m

//  级联

//

// Created by ywxkdz on 15/11/23.

// Copyright (c) 2015年 itcast. All rights reserved.

//

 

#import <Foundation/Foundation.h>

 

int main(int argc, const char * argv[]) {

   @autoreleasepool {

       //定于数组记录山东省的地市

       NSArray *sd=@[@"jinan",@"qingdao",@"linyi",@"weifang",@"rizhao"];

       //定于数组记录辽宁省的地市

       NSArray *ln=@[@"dalian",@"shenyang",@"tieling",@"anshan"];

       //将地市数组与省对应形成字典

       NSDictionary *dic=[NSDictionarydictionaryWithObjectsAndKeys:ln,@"liaoning",sd,@"shandong",nil];

       //打印字典

       NSLog(@"%@",dic);

       //将字典写入到文件中

       BOOL is= [dic writeToFile:@"/Users/ywxkdz/Desktop/basetest/MyOcTest/dic.plist" atomically:YES];

       //判断是否写入成功

       if (is) {

           NSLog(@"succ");

       }else{

           NSLog(@"unsucc");

       }

       

       //从文件中读取字典内容

       

       NSDictionary *dict=[NSDictionarydictionaryWithContentsOfFile:@"/Users/ywxkdz/Desktop/basetest/MyOcTest/dic.plist"];

       //打印字典内容

       NSLog(@"%@",dict);

       //遍历字典

       for (NSString *key in dict) {

           NSLog(@"%@",dic[key]);

           int i=0;

           //遍历数组

           for (NSString *city in dict[key]) {

                NSLog(@"%d  city=%@",++i,city);

           }

       }

       

    }

   return 0;

}

 

2     NSmutableDictionary(可变字典)

可变字典创建

       NSmutableDictionary *dic=[ NSmutableDictionarydictionary];//空字典

NSmutableDictionary *dic=[ NSmutableDictionary dictionaryWithCapacity:5];//指定长度

添加元素

       [dic setValue: id(value)forKey:id(key)  ];

删除元素

       [dic removeObjectForKey:id(key)] ;

       [dic removeAllObject];

修改元素

       [dic setObject:id(newvalue)ForKey:id(key)];

查找元素

       [dic alKeys]  //返回值类型 NSArray

3     NSFileManager(单例模式)

可以进行常见的操作

 

基本使用

       NSString*path=@“path”;

       NSFileManager*fmgr= [NSFileManager defaultManager];//创建文件单例对象

       BOOLisExist=[ fmgr fileExistAtPath:path]; //是否存在

       BOOLisDir;

[ fmgr fileExistAtPath:path isDirectory :&isDir];//返回值isDir  YES 是目录 否则是文件

       BOOLisReadable=[ fmgr isReadabletAtPath:path];//是否可读

       BOOLisWriteable=[ fmgr isWriteabletAtPath:path];//是否可行

       BOOLisDelable=[ fmgr isDeletabletAtPath:path];//是否可删

       获取属性信息

              NSDictionary*dic=[fmgr attributeOfItemAtPath: path];

       获取指定目录下的文件及子目录

              NSArray* subpath= [fmgr subpathAtPath:dirpath];//递归方式

              NSArray* subpath= [fmgr subpathOfDirectory:dirpath errer:nil];//非递归

              NSArray* subpath= [fmgr contectsOfDirectory:dirpath]; //只获取子目录或子文件

创建文件

       BOOL isSucc=[fgmr createFileAtPath:路径……];//自动创建缺失目录

创建目录

       BOOL isSucc=[fgmr createDirectoryAtPath:路径……];//自动创建缺失目录

复制

       [ fmgr copyItemAtPath:源目录 toPath:目标目录];  //将文件或者目录copy到目标目录。

移动

[ fmgr moveItemAtPath:源目录 toPath:目标目录];  //将文件或者目录移动到目标目录。

删除

       [ fmge removeItemAtPath:源目录];  //将文件或者目录删除。

4     文件下载思路

1) 客户端发送请求到服务器,请求下载某文件

2) 服务器发送响应,返回文件数据

3) 客户端利用NSData存放服务器返回的文件数据

4) 利用文件管理将数据写入到新文件中。

 

5     常见结构体

 

NSPoint和CGPoint

对比 NSRange学习

       定义

              structCGPoint{

                     CGFloatx;   //x坐标

                     CGFloaty;   //y 坐标

};

type struct CGPoint CGPoint;

typedef double CGFloat;

 

方法赋值

CGFloat *cgp = CGMakePoint(5,5);

       NSSize和CGSize

 

              类比NSPoint学习

              表示面积大小weigth和heigth

       NSRect和CGRect

              表示矩形的起始点和大小  //嵌套结构体

              NSRectrect ={{0,1},{5.4}}

              NSRectrect= NSRectMake(x,y,w,h);

6     NSNumber

基本数据类型的包装类

        int a=10;

        NSNumber*intobj= [ NSNumber numberWithInt:a];

        简写: NSNumber *intobj=@10;

必须经过取值才能使用对象的数值。

        int b=[intobjvalue];

其他数据类型类同。

7     NSValue

NSNumber 是NSValue的子类主要把指针、枚举类型和结构体等包装成OC对象

用法类似 NSNumber

 

typedef struct{

       intyear;

       intmonth;

       intday ;

}MyDate;

 

MyDate  myday={2014,5,8};  //生成结构体并赋值

//将 MyDate  类型变量转换为对象

NSValue *md = [ NSValue valueWithBytes:&myday objCType: @encode(MyDate )];

        &myday:传递变量地址

objCType: @encode(MyDate ):把MyDate类型生成一个常量字符串描述。

 

取对象结构体的值

       MyDate  myd;

       [mdgetValue:&myd];//获取对象md的值存放在myd。

8     NSDate(日期类)

获取当前世界

NSDate *date =[ NSDate date]; //创建时间对象 初始化为当前时间。(格林威治时间)

格式化

       NSDateFormatter *dateForm =[ NSDateFormatter  new ];//生成对象

       dateForm.dateFormat=@“yyyy年MM月dd日 HH:mm:ss”//设置格式

       HH:24小时制

       hh:12小时制

       mm:两位分钟

格式化日期

NSString *darestr=[ dateForm stringFromDate:date];//格式化日期

               计算日期

                     NSDate*date =[ NSDate dateWitnTimeIntercalSinceNow:秒数];//24*60*60

                     NSDate*date =[ NSDate addTimeIntercalSinceNow:秒数];//过时了

               快速获取年月日时分秒

                     NSCalendar*cal =[ NSCalendar currentCalendar ];

                     NSDateComponents *coms=[cal components:枚举列表fromDate:date];

                     枚举列表中填获取哪些信息 年、月、日、时、分、秒。用竖线分隔

                     coms.year:获取年的值

               比较日期差、

                     NSDateComponents*coms=[cal components:枚举列表 fromDate:date] toDate:date2;

      

9     集合对象的内存管理

  将元素对象加入到集合对象中引用计数 +1

  数组被销毁时数组先销毁  元素对象的引用计数 -1 

  元素对象被数组删除时引用计数 -1

普遍规律

        集合对象调用 add 或insert方法 引用计数+1

        集合对象调用 remove 或delete方法 引用计数+1

 

10    copy

copy的目的:使用某个对象的数据时,修改对象时候不影响原来对象内容

              特点

                     对象和副本修改时互不影响。

              使用

                     首先遵守NSCopy协议和NSMutableCopy协议

             

              注意

                     copy是浅复制地址不变只是复制地址  MutableCopy深复制会重新分配空间

                     可变对象  -copy-> 不可变对象  //地址不变 引用计数+1

                     不可变对象  -copy-> 不可变对象 //地址不变 引用计数+1

                     可变对象  -MutableCopy-> 可变对象 //重新分配空间

                     不可变对象  - MutableCopy -> 可变对象//重新分配空间

              copy的内存管理

11  @property中的copy关键字

      MRC 下

copy :对象赋值之后就不会改变 适用于 NSString 和block

               retain:其他OC对象

               assign:基本数据类型

        ARC下

                     copy:对象赋值之后就不会改变 适用于 NSString 和block

                     strong:其他OC 对象

                     weak:对象相互引用时

                     assign:基本数据类型

12  自定义的类实现自定义操作

步骤

1)  新建Person类,该类遵守NSCopy协议。

2)  实现copyWithZone方法返回对象的副本

3)  在copyWithZone方法中创建新的对象并设置对象的数据与现在对象一直,返回新对象

4)  使用 copyWithZone对象方法创建对象

 

 

copyWithZone实现

-(id)copyWithZone(NSZone *)zone{           //可以忽略zone

                      Person  *p =[[Person alloc] init];   //新建对象

                      p.speed=self.age;         //将调用者的成员变量值赋值给新建对象

}

13  简单的单例模式

   程序运行期间类的对象成为唯一的实例。提供访问点,共享资源。

       设计要点

              类只有一个实例

               必须自己创建对象

               必须保证唯一性

               必须向系统提供实例

        设计实现

                创建类(SingletonTools)

                类实现文件(.m)中定义静态的单例对象

                      staticSingletonTools *instance =nil;

                声明和实现 共享方法

                      +(instancetype) shareInstaces{

                                    if(instance== nil){

                                    instance=[SingletonTools new];

}

return instance;

}

 

重写可以创建对象的方法,将所有的方法全部调用该shareInstaces 方法

       +(id)copyWithZone:(NSZone*)zone

       +(id)allocWithZone:(NSZone*)zone

       -(id)retain

       -(NSUInteger) retainCount

       -(oneway void) release

       -(id)autorelease

 

       

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值