【学习ios之路:Objective-C】block块语法.NSDate和NSDateFormatter

一.Block块语法

块语法:可以在函数内部定义匿名函数

格式: ^返回值类型(参数列表){函数体}其中返回值类型可以省略

block简单练习:

①.求两个数的最大值

      //int (^)(int,int)//block类型
         int (^max)(int,int) = ^(int a,int b) {//block的实现体

         return a > b ? a : b;

         };
         int value = max(4,6);
         printf("%d",value);

②.将一个整数转化为字符串对象

        typedef void (^Exchange)(int);
        Exchange  change = ^(int number) {
            NSString *string = [[NSString alloc] initWithFormat:@"%d",number];
            NSLog(@"%@",string);
        };
        change(5);

③.将一个整数转化为NSMumber 对象

     typedef  NSNumber *(^EXC)(int);
        EXC exchange = ^ NSNumber *(int number) {
            return @(number);
        };
        NSNumber *number = exchange(5);
        NSLog(@"%@",number);

④.传入字符串对象,返回全部大写之后的对象

      typedef NSString *(^UPPER)(NSString *);
        UPPER upperString = ^NSString *(NSString *string) {
            return [string uppercaseString];
        };

        NSString *temp = @"sdsdfasdf";
        NSString *num = upperString(temp);
        NSLog(@"%@",num);

⑤实现求OC数组元素的个数,

     typedef NSUInteger (^Count)(NSArray *);
       Count getCount = ^NSUInteger (NSArray *arr) {
            return [arr count];
        };
        NSArray *ar1 = @[@"sadf",@"asdf",@"dsfg",@"fdg"];
        NSUInteger count = getCount(ar1);
        NSLog(@"%ld",count);

⑥.定义一个block,实现两个整数的比较

        typedef NSComparisonResult (^Compare)(int,int);
        Compare compare = ^NSComparisonResult(int a,int b) {
            //return [@(a) compare :@(b)];
            return a > b ? NSOrderedDescending : a == b ?
                                          NSOrderedSame : NSOrderedAscending;
        };
        NSComparisonResult x =  compare(5,6);
        NSLog(@"%ld",x);//-1

⑦.实现两个字符串对象的比较

     typedef NSComparisonResult (^CompareString)(NSString *,NSString *);
        CompareString com = ^NSComparisonResult(NSString *str1,NSString *str2) {
            return [str1 compare:str2];
        };
        NSString *temp1 = @"dasf";
        NSString *temp2 = @"das35f";
        NSComparisonResult tem  = com(temp1,temp2);
        NSLog(@"%ld",tem);

⑧.block实现数组排序

    NSArray *ar = @[@"ads",@"dd",@"ff",@"hh"];
    NSArray *ar1 = [ar sortedArrayUsingComparator:^(id num1,id num2) {
        return -[(NSString *)num1 compare: (NSString *)num2];
    }];
    NSLog(@"%@",ar1);

2.block与局部变量和全局变量的关系

    __block int num = 1; //__block修饰后可以修改局部变量
    void (^addNum)() = ^void() {
      int c = num * 10 ; //block内部可以访问外部的局部变量
        num++; //内部访问到局部变量,但不能修改局部变量.如果用__block修饰,可以修改
        printf("%d",c);
    };
    addNum();

二.NSDate和NSDateFormatter常见应用

①.获取当前零时区的时间

   NSDate *date = [NSDate date];
   NSLog(@"%@",date);

②.获取明天此时的时间

   NSDate *tomorrow = [NSDate dateWithTimeIntervalSinceNow:60 * 60 * 24];
   NSLog(@"%@",tomorrow);

③获取昨天当前的时间

  NSDate *yesterday = [NSDate dateWithTimeIntervalSinceNow:-60 * 60 * 24];
  NSLog(@"%@",yesterday)

④.通过1970/1/1,计算出此时的时间 2014 /12/29

   NSDate *now = [NSDate dateWithTimeIntervalSince1970:
                          (11 * 366 + 33 * 365)* 24 * 3600 + 362 * 24 * 3600];
   NSLog(@"%@",now);

⑤.通过2001/1/1 计算出此时的时间//默认2001/1/1

  NSDate *now1 = [NSDate dateWithTimeIntervalSinceReferenceDate:
                                (3 * 366 + 11 * 365)* 24 * 3600 - 3 * 24 * 3600];
  NSLog(@"%@",now1);

⑥.获取两个时间的时间间隔

   NSTimeInterval interval = [date1 timeIntervalSinceDate:date2];
   //double类型 NSTimeInterval
   NSLog(@"%.1f",interval);

⑦.比较日期的早晚,返回早晚日期

 NSDate *dt1 = [date1 earlierDate:date2];
 NSDate *dt2 = [date1 laterDate:date2];
 NSLog(@"%@",dt1);
 NSLog(@"%@",dt2);

⑧.判断日期是否相同

  BOOL isEqual = [date1 isEqualToDate:date2];
        if(isEqual) {
            NSLog(@"相等");
        } else {
            NSLog(@"不相等");
        }

三.日期格式类NSDateFormatter

①.按照指定的日期格式,将NSDate对象转为日期字符串.

- (NSString *)stringFromDate:(NSDate *)date;

代码如下:

   NSDate *date = [NSDate date];
   //获取当前时间
   NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
   //设置格式.
  //HH ---表示24小时制度,hh---表示12小时制 aa 下午/上午 EEE周二
  [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss EEE aa"];
  /[formatter setDateFormat:@"MM月dd日 EEE aaHH:mm"];
  //转换格式 NSString *string =[formatter stringFromDate:date]; NSLog(@"%@",string);

2.按照指定的日期格式,将日期字符串转为NSDate对象

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    NSString *string1 = @"2014年05月01日 10点53分18秒";
    NSLog(@"%@",string1);
    //对于NSDate对象来说,永远都是零时区的时间
   //HH ---表示24小时制度,hh---表示12小时制
  [formatter setDateFormat:@"yyyy年MM月dd日 HH点mm分ss秒"];
  NSDate *date1 = [formatter dateFromString:string1]; NSLog(@"%@",date1);
时间: 2024-08-07 08:19:37

【学习ios之路:Objective-C】block块语法.NSDate和NSDateFormatter的相关文章

【学习ios之路:Objective-C】OC中常用的系统排序方法

①.OC中常用排序方法: 1).不可变数组 - (NSArray *)sortedArrayUsingSelector:(SEL)comparator; - (NSArray *)sortedArrayUsingComparator:(NSComparator)cmptr; 2)可变数组 - (void)sortUsingSelector:(SEL)comparator; - (void)sortUsingComparator:(NSComparator)cmptr; 3).字典排序 - (NS

【学习ios之路:Object-C错误】Collection <__NSArrayM: 0xb550c30> was mutated while being enumerated.

错误提示: 产生错误的原因: 当程序在执行遍历时,同时又修改数组中的内容,导致崩溃. 解决方法如下: 方法1:定义一个一模一样的数组,遍历新数组的同时,对原数组进行操作修改. 例如: NSMutableArray *arrayTemp = [@[@"aa",@"vv",@"bb"] mutableCopy]; NSArray *array = [NSArray arrayWithArray: arrayTemp]; for (NSString *

Block --- 块语法

block 块语法.  --- 匿名函数 block可以在函数内部定义匿名函数. blocK -- 实现两个数的最大值. 函数: #import <Foundation/Foundation.h> #import "Person.h" //1.输出I love ios void output() { printf("I love ios\n"); } //2.求两个数的最大 int maxValue(int x, int y) { return x &g

浅析ios开发中Block块语法的妙用

事实上,任何一个应用的开发都离开多线程.而"块"block与GCD就是苹果OC语言中多线程的核心. 一.块的内部结构 在oc中,块语法以闭包的形式存在,每一个Objective-C对象都占据着某个内存区域.块本身也是一个对象,在存放块的对象内存区域中,首个变量是指向Class的指针,该指针叫做isa.其余内存里含有块对象正常运转所需的各种信息. 以下是块语法的内部结构变量. 1.void*                                   isa(指向class的对象

【学习ios之路:UI系列】NSPredicate相关用法

NSPredicate NSPredicate是一个Foundation类,它指定数据被获取或者过滤的方式. 它的查询语言就像SQL的WHERE和正则表达式的交叉一样,提供了具有表现力的,自然语言界面来定义一个集合被搜寻的逻辑条件. NSPredicate的几种用法 ①常见形式 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name == 'zhangdan'"]; //注意:如果谓词串中的文本块未被引用,则被看

第六讲 Block块语法及Block与数组的排序,ios字面量的使用(源代码上传)

1 #import <Foundation/Foundation.h> 2 3 4 #import "Student.h" 5 6 int c =200; 7 int main(int argc, const char * argv[]) { 8 @autoreleasepool { 9 /* 10 ------------------------------------- 11 定义block变量的四种方法 12 -----------------------------

【学习ios之路:UI系列】iOS沙盒机制,文件读取,归档与反归档

1.IOS中的沙盒机制 IOS中的沙盒机制是一种安全体系,它规定了应用程序只能在为该应用创建的文件夹内读取文件,不可以访问其他地方的内容.所有的非代码文件都保存在这个地方,比如图片.声音.属性列表和文本文件等. 特点: 1.每个应用程序都在自己的沙盒内 2.不能随意跨越自己的沙盒去访问别的应用程序沙盒的内容 3.应用程序向外请求或接收数据都需要经过权限认证 每个沙盒含有3个文件夹:Documents, Library 和 tmp.Library包含Caches.Preferences目录.如下图

【学习ios之路:Object-C】类与对象

1.面向对象和面向过程概念 1).面向过程 面向过程:以过程为核心,注重的是完成事件的详细步骤,一步一步如何实现. 2).面向对象 面向对象:以事物为核心,注重的是参与该事件的事物应该具备的功能.所以完成该事件只是事物所有功能中的一个功能. 2.类与对象 类: 类是具有相同特征以及行为的事物的抽象,它是一个抽象的概念,不具体. 对象: 类的实例.类的具体体现.生活中的万物都是对象. 3.OO与OOP OO:(Object Oritented)面向对象 OOP:(Object Oriented P

【学习ios之路:C语言】存储区内存划分

一. 内存存储区的划分: 1.栈区:栈区主要存放函数内部定义的变量,数组.函数调用时,开辟空间,函数执行完毕,回收空间,空间的开辟与回收有系统管理. 2.堆区:堆区最大的特点:空间的开辟与释放有开发人员手动管理. 3.全局区静态区:主要存放函数外部定义的全局变量以及静态变量,空间一旦开辟,就不会回收.直到应用程序执行结束. 4.常量区:存储常量.1.整形常量.2.浮点型常量.3,字符串常量.4.字符串常量. 5.代码区:存放程序编译之后生成的cpu指令. 二.malloc,在堆区开辟空间. //