文档章节

黑马程序员-13-Foundation(NSNumber,NSDate,NSValue)

 明天过后1
发布于 2014/10/08 19:10
字数 1258
阅读 31
收藏 0
点赞 0
评论 0

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

1. NSNumber

    a. NSNumber设计目的

            OC已经有int,float,double...类型为什么还需要设计NSNumber呢?原因是很多集合类型如NSArray,NSDictionary等只能容纳OC对象对于一些类似于int的基本数据类型我们需要把它转化为OC对象才能被集合容纳,这就是NSNumber设计的目的。

    b. NSNumber的使用

    #import<Foundation/Foundation.h>
    
    int main()
    {
        // 一般的初始化
        NSNumber *num = [[NSNumber alloc] initWithInt:10];
        NSLog("num = %d",num);
        [num release];
        
        @autoreleasepool{
            // 创建integer类型对象
            NSNumber *intNum = [NSNumber numberWithInteger:123];
            NSLog("intNum = %i",[intNum integerValue]);
            
            // 创建long类型对象
            NSNumber *longNum = [NSNumber numberWithLong:0xabcab];
            NSLog("longNum = %lx",longNum);
            
            // 创建float类型对象
            NSNumber *floatNum = [NSNumber numberWithFloat:123.0];
            NSLog("floatNum = %f",floatNum);
            
            // 创建double类型对象
            NSNumber *doubleNum = [NSNumber numberWithDouble:123e+10];
            NSLog("doubleNum = %lg",doubleNum);
            
            // 创建char类型对象 
            NSNumber *charNum = [NSNumber numberWithChar:'c'];
            NSLog("charNum = %c",charNum);
            
            NSNumber *myNum = [NSNumber numberWithFloat:123.0];
            
            // 大小对比 NSOrderedAscending  升序
            if ( [intNum compare:myNum] == NSOrderedAscending ){
                NSLog("左边的数比较大");
            } else {
                NSLog("右边的数比较大");
            }
        }
        return 0;
    }

    c. 规律

        (1) 初始化 : 

            1) 对于 alloc 这种方式初始化 它们的 init 通常是 initWith( Int,Char,Double...),如果没有使用ARC一般使用手动释放内存.

            2) 对于 numberWith 这种初始化方式除了 int 类型对应的是 numberWithInteger ,其他的通常都是 numberWith(Char,Double,Float...).这种初始化方式默认为autorelease,没有使用ARC一般用于autoreleasepool

        (2) 取值 : 一般都是 (intergerValue,doubleValue...);


2. NSValue

    a. 设计目的

        NSValue是用来包装C语言的一些数据类型,例如:double,float,struct(结构体),指针等,因此它比NSNumber还强大,NSNumber是NSValue的子类

    @interface NSValue (NSValueUIGeometryExtensions)   
        
    + (NSValue *)valueWithPointer:(const void *)pointer;                             // 保存对象指针   
        
    + (NSValue *)valueWithCGPoint:(CGPoint)point;                                    // 保存CGPoint结构体   
    + (NSValue *)valueWithCGSize:(CGSize)size;                                       // 保存CGSize结构体   
    + (NSValue *)valueWithCGRect:(CGRect)rect;                                       // 保存CGRect结构体   
    + (NSValue *)valueWithCGAffineTransform:(CGAffineTransform)transform;   
    + (NSValue *)valueWithUIEdgeInsets:(UIEdgeInsets)insets;   
        
    - (void *)pointerValue;   
    - (CGPoint)CGPointValue;   
    - (CGSize)CGSizeValue;   
    - (CGRect)CGRectValue;   
    - (CGAffineTransform)CGAffineTransformValue;   
    - (UIEdgeInsets)UIEdgeInsetsValue;   
        
    @end

    b. 使用

// 默认开启ARC
#import <Foundation/Foundation.h>

typedef struct{
    int age;
    char *name;
} Student;

int main(int argc, const char * argv[]) {
    @autoreleasepool {
 
    /***************************** 结构体包装 ******************************/
        Student s;
        s.age = 22;
        s.name = "mike";
        // 包装结构体
        /*
          [NSValue value:<#(const void *)#> withObjCType:<#(const char *)#>]
           参数1 : 目标结构体地址
           参数2 : 结构体的类型,它必须使用编译器的@endcode指令来创建
                   @encode(结构体类型,但不能使用C语言字符串作为硬编码作为参数)
         */
        NSValue *value = [NSValue valueWithBytes:&s objCType:@encode(Student)];
        
        // 结构体获取
        Student temp;
        [value getValue:&temp];
        // NSLog(@"name is %s ,age is %d",temp.name,temp.age);
     /***************************** 基本数据类型包装 ******************************/
        int a =10;
        NSValue *intValue = [NSValue valueWithBytes:&a objCType:@encode(int)];
        int tempA;
        [intValue getValue:&tempA];
        NSLog(@" a = %d",tempA);
    /***************************** CGPoint包装 ******************************/
        // CGPoint包装
        CGPoint point = CGPointMake(10, 20);
        NSValue *pValue = [NSValue valueWithPoint:point];
        
        // CGPoint获取
        CGPoint pTemp = [pValue pointValue];
        NSLog(@"x = %f ,y = %f",pTemp.x,pTemp.y);
        
    /***************************** 指针包装 ******************************/
        // 指针包装
        /*
            + (NSValue *)valueWithPointer:(const void *)aPointer
            等价于
            NSValue *theValue = [NSValue value:&aPointer withObjCType:@encode(void *)];
         */
        Student *studentP = &s;
       NSValue *pointValue1 = [NSValue valueWithPointer:studentP];
       Student *pointTemp = [pointValue1 pointerValue];
       NSLog(@"pointTemp->age = %d ,pointTemp->name = %s",pointTemp->age,pointTemp->name);
    }
    return 0;
}


3. NSDate

    a. 简介

        (1) NSDate是用来获取时间的,但IOS中NSDate默认打印出来的是0时区(格林威治标准时间GMT)的时间

          (2) 如果想显示北京时间(东八区),还要做时区转换

        (3) NSDate是以秒为单位的

        (4) NSDate通常被NSDateFormatter格式化之后才能输出显示,常用格式如下:

                    字母       日期或时间元素                     表示                示例  

                    y           年                                       Year               1996; 96  

                    M          年中的月份                            Month            July; Jul; 07  

                    w          年中的周数                            Number          27  

                    W         月份中的周数                          Number          2  

                    D          年中的天数                            Number          189  

                    d          月份中的天数                          Number          10   

                    F          月份中的星期                          Number          2  

                    E          星期中的天数                          Text               Tuesday; Tue  

                    a          Am/pm 标记                          Text                PM  

                    H          一天中的小时数(0-23)           Number           0  

                    k          一天中的小时数(1-24)            Number           24  

                    K          am/pm 中的小时数(0-11)      Number           0  

                    h          am/pm 中的小时数(1-12)      Number           12  

                    m         小时中的分钟数                        Number           30  

                    s          分钟中的秒数                           Number           55  

     b. 使用

// 默认启用ARC
#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // NSDate 的初始化,默认是取的是0时区的时间
        // NSDate *date0 = [[NSDate alloc] init];
        NSDate *date0 = [NSDate date];
        // 默认打印的是0时区的时间
        // NSLog(@"%@",date0);
        // date0 8秒钟之后的时间
        // typedef double NSTimeInterval;
        NSDate *date8 = [NSDate dateWithTimeInterval:8 sinceDate:date0];
        // 1970年到现在到现在的秒数
        NSTimeInterval sencondsSince1970 = [date0 timeIntervalSince1970];
        // 获取24小时之前此时刻的时间 : 昨天的这个时刻相差(秒) : -(24 * 60 * 60)
        NSDate *yesterday = [NSDate dateWithTimeIntervalSinceNow:-(24 * 60 * 60)];
 
        
        // NSDateFormatter的初始化
        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
        // 设置显示格式
        formatter.dateFormat = @"yyyy - MM - dd : HH:mm:ss";
        
        // 获取0时区的时间字符串
        NSString *dateStr0 = [formatter stringFromDate:date0];
        // 获取8秒钟之后东八区的时间字符串
        NSString *dateStr8 = [formatter stringFromDate:date8];
        // 获取昨天当前时间的格式化字符串
        NSString *yesterdayStr = [formatter stringFromDate:yesterday];
        
        NSLog(@"系统当前时间 : %@",dateStr0);
        NSLog(@"8秒钟之前的时间 : %@",dateStr8);
        NSLog(@"昨天此时时间 : %@",yesterdayStr);
        
        NSLog(@"1970年到现在到现在的秒数 = %lf",sencondsSince1970);
    }
    return 0;
}

                    

                








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

 详情请查看:http://edu.csdn.net/heima



© 著作权归作者所有

共有 人打赏支持
粉丝 2
博文 20
码字总数 36166
作品 0
佛山
OBjectve-c 基本数据类型 总结

#import <Foundation/Foundation.h> #import "Person.h" int main(int argc, const char argv[]) { @autoreleasepool { / 字符串可变 不可变 NSMutableString NSString 数组 可变 不可变 NS......

_pioneer_ ⋅ 2015/11/13 ⋅ 0

IOS Copy什么时候用?

在O-C里面有个值对象的概念,当你新定义一个属性是值对象时就应该用copy来修饰。那么都什么对象是值对象呢? 值对象是指封装了基本值(属于 C 数据类型)且提供与该值相关的服务的对象。值对...

李远超 ⋅ 2013/05/06 ⋅ 2

Foundation框架

什么是框架 众多功能API的集合 Foundation框架的作用 Foundation框架是MaciOS中其他框架的基础 Foundation框架包含了很多开发中常用的数据类型: 结构体 枚举 类 如何使用Foundation框架 要想...

5vinsEnt ⋅ 2016/03/30 ⋅ 0

OC学习篇之---Foundation框架中的其他类(NSNumber,NSDate,NSExcetion)

前一篇说到了Foundation框架中的NSDirctionary类:http://blog.csdn.net/jiangwei0910410003/article/details/41830179,这一一篇来看一下Foundation的其他常用的类:NSNumber,NSDate,NSExc...

jiangwei0910410003 ⋅ 2014/12/10 ⋅ 0

NSInteger,NSUInteger,NSNumber

Objective-C入门教程10:数字类型(NSInteger,NSUInteger,NSNumber) 柳志超博客 » Program » Objective-C » Objective-C入门教程10:数字类型(NSInteger,NSUInteger,NSNumber) posted i......

Gong_xiao ⋅ 2015/10/15 ⋅ 0

初学ios时候String的各种用法

学习方法 3 2. NSString 2.1. 创建常量字符串。 4 2.2. 创建空字符串,给予赋值。 4 2.3. 使用变量初始化 4 2.4. 判断是否包含某字符串 4 2.4.1. 检查字符串是否以另一个字符串开头- (BOOL) ...

江丶流儿 ⋅ 2013/05/16 ⋅ 1

一、NSString 

一、NSString 创建字符串。 NSString *astring = @"This is a String!"; 创建空字符串,给予赋值。 NSString *astring = [[NSString alloc] init]; astring = @"This is a String!"; NSLog(@......

盼 ⋅ 2016/12/09 ⋅ 0

Objective-C - Foundation框架初探

Objective-C - Foundation框架初探 Foundation之于Objective-C就好比Java中SDK类库之于Java。 这个框架提供了基本的Objective-C的类,最重要的根类,NSObject,它定义了基本的对象行为。 框架...

开发小菜鸟一枚 ⋅ 2013/11/06 ⋅ 0

iOS-Foundation框架中常用的类

Foundation框架中最常用的类。 Foundation框架中最我们经常用的类大致有NSString、NSArray、NSDictionary等等,虽然不需要将每一个类中提供了什么方法都记下来,但是需要做到心中有数,知道F...

xx_cc ⋅ 2016/10/25 ⋅ 0

YYModel的介绍与使用

最近有时间就来看看之前一直想了解的YYModel,下面开始直奔主题。 介绍 iOS / OSX高性能模型框架。(YYmodel是来自组件YYKit) 性能 时间成本(过程GithubUser 10000次iPhone 6): 1-0.png Manu...

宵衣旰食 ⋅ 2016/11/25 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

设计模式--装饰者模式

装饰者模式 定义 动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。 通用类图 意图 动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比...

gaob2001 ⋅ 今天 ⋅ 0

JavaScript零基础入门——(八)JavaScript的数组

JavaScript零基础入门——(八)JavaScript的数组 欢迎大家回到我们的JavaScript零基础入门,上一节课我们讲了有关JavaScript正则表达式的相关知识点,便于大家更好的对字符串进行处理。这一...

JandenMa ⋅ 今天 ⋅ 0

sbt网络问题解决方案

转自:http://dblab.xmu.edu.cn/blog/maven-network-problem/ cd ~/.sbt/launchers/0.13.9unzip -q ./sbt-launch.jar 修改 vi sbt/sbt.boot.properties 增加一个oschina库地址: [reposit......

狐狸老侠 ⋅ 今天 ⋅ 0

大数据,必须掌握的10项顶级安全技术

我们看到越来越多的数据泄漏事故、勒索软件和其他类型的网络攻击,这使得安全成为一个热门话题。 去年,企业IT面临的威胁仍然处于非常高的水平,每天都会看到媒体报道大量数据泄漏事故和攻击...

p柯西 ⋅ 今天 ⋅ 0

Linux下安装配置Hadoop2.7.6

前提 安装jdk 下载 wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.6/hadoop-2.7.6.tar.gz 解压 配置 vim /etc/profile # 配置java环境变量 export JAVA_HOME=/opt/jdk1......

晨猫 ⋅ 今天 ⋅ 0

crontab工具介绍

crontab crontab 是一个用于设置周期性被执行的任务工具。 周期性执行的任务列表称为Cron Table crontab(选项)(参数) -e:编辑该用户的计时器设置; -l:列出该用户的计时器设置; -r:删除该...

Linux学习笔记 ⋅ 今天 ⋅ 0

深入Java多线程——Java内存模型深入(2)

5. final域的内存语义 5.1 final域的重排序规则 1.对于final域,编译器和处理器要遵守两个重排序规则: (1)在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用...

江左煤郎 ⋅ 今天 ⋅ 0

面试-正向代理和反向代理

面试-正向代理和反向代理 Nginx 是一个高性能的反向代理服务器,但同时也支持正向代理方式的配置。

秋日芒草 ⋅ 今天 ⋅ 0

Spring 依赖注入(DI)

1、Setter方法注入: 通过设置方法注入依赖。这种方法既简单又常用。 类中定义set()方法: public class HelloWorldOutput{ HelloWorld helloWorld; public void setHelloWorld...

霍淇滨 ⋅ 昨天 ⋅ 0

马氏距离与欧氏距离

马氏距离 马氏距离也可以定义为两个服从同一分布并且其协方差矩阵为Σ的随机变量之间的差异程度。 如果协方差矩阵为单位矩阵,那么马氏距离就简化为欧氏距离,如果协方差矩阵为对角阵,则其也...

漫步当下 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部