Object-C基础(11)——字符串、日期相关类与拷贝

         Foundation框架包含了大量的基础的、工具类,这些工具类既然是Cocoa开发的基础,也是Cocoa Touch开发的基础。

        如果程序导入Cocoa框架,实际上也就导入了Foundation框架;对于iOS开发,如果导入了UIKit框架,实际上也导入了Foundation框架。

        字符串类:NSString(不可变)和NSMutableString(可变的)

                                  NSString

                                     ↑继承

                            NSMutableString

        NSString能支持的功能,NSMutableString都可以支持。

        创建NSString

                - 根据format来创建

                - 根据C字符串来创建。

               - 读取文件来创建。

        转换

        可以把Object-C字符串,转换成C的字符串。

        也可以把Object-C的字符串,输出到文件中。

        工具方法:

        包含字符串是否以XX开头、以XX结尾,是否包含YY子串。

        可变字符串:NSMutableString

        对于NSString而言,它所包含的字符序列是不能改变的,

        NSMutableString可以增加、删除、替换、插入等操作。

        说明:如果程序经常需要对字符串的内容进行修改,那么使用NSMutableString会更加合适。

        如果你用NSString对象,程序每次修改一次字符串,程序就需要重新创建一次NSString对象,这样内存开销非常大

 日期相关类 NSDate

       NSDate: 代表了日期、时间点。

             计算两个时间之间相差的秒数。

       NSDateFormatter - 完成NSDate与NSString之间的相互转换

             NSDateFormatter的作用就是:    

                        stringFromDate:

             NSDate       --->      NSString

                                 <-----

                     dateFromString:

        NSDateFormatter有两种用法:

        1 - 按固定格式输出,分别为dateStyle、timeStyle指定属性值:no、short、medium、long、full。

        2 - 按自定义的格式输出。 需要指定dateFormat属性,该属性值应该是一个格式化字符串。

              yyyy MM dd    HH/hh mm  ss

        NSDateComponents:可用于提取日期的指定字段(年、月、日、时、分、秒等)的值.

        该类通常要和NSCalendar结合使用。

        NSCalendar的方法

        components:fromDate:     :从指定NSDate中提取指定字段(年、月、日、时、分、秒等)的值.

        dateFromComponents:    :根据指定字段(年、月、日、时、分、秒等)的值来恢复NSDate对象。

       NSTimer:定时器。

       可以周期性地执行某个方法。比如控制程序每隔多长时间去执行某个方法。

       NSTimer通常需要图形界面上执行。

       scheduledTimerWithTimeInterval: 多少秒

                                                        target:谁

                                                        selector:方法

                                                        userInfo:nil

                                                        repeats:YES

      控制每隔多少秒,执行谁的方法一次。 最后一个参数控制是否重复。

对象拷贝(复制

      copy和mutableCopy

          copy拷贝得到总是不可变的副本(如果该类有可变类和不可变类的两个版本),即使原对象是可变的。

          mutableCopy拷贝得到总是可变的副本(如果该类有可变类和不可变类的两个版本),即使原对象是不可变的。

      自定义类的拷贝操作

         1. 如果希望自定义类的实例可调用copy方法,那么该类要遵守如下两个要求:

            A。该类必须实现copyWithZone:方法 —— 因为当程序调用对象copy方法时,实际上是执行了copyWithZone:方法。

            B。建议让该类遵守NSCopying协议 —— 可选的。 

         可变类(mutable class)与不可变类(immutableclass)

         不可变类:当该类的实例被创建出来之后,如果该类的所有成员变量的值都永远不能被改变,该类就是不可变类。

                  反之就是可变类。

         如何设计可变类:要么它的成员变量可以直接被赋值,要么该成员变量有对应的setter方法

                       ——这说明它的成员变量是可以被改变的,因此该类就是可变类。

         如何设计不可变类:所有成员变量被隐藏起来,成员变量只有getter方法、没有setter方法,

                       ——这说明它的成员变量是不可以被改变的,因此该类就是不可变类。

         2. 如果希望自定义类的实例可调用mutableCopy方法,那么该类要遵守如下两个要求:

            A. 该类必须实现mutableCopyWithZone:方法 —— 因为当程序调用对象mutableCopy方法时,

                实际上是执行了mutableCopyWithZone:方法。

            B. 建议让该类遵守NSMutableCopying协议 —— 可选的。

        如果你自定义的类,本身就只有一个可变版本。此时实现该对象的拷贝时,就无需区分copy和mutableCopy。

        只有当你自定义的类有可变版本和不可变版时,此时就需要严格实现该类的copy和mutableCopy方法。

        其中copy方法返回的总是不可变版本;mutableCopy方法返回的总是可变版本。

        深拷贝和浅拷贝

          浅拷贝:当拷贝对象时,如果对象属性是指针,程序只是复制该指针的值,并未为指针所指的对象复制副本。

                 因此被拷贝对象与拷贝的新对象会共同指向某个对象。

          深拷贝:当拷贝对象时,如果对象属性是指针,必须把该指针所指向的对象都要复制一份副本。

                 而且深拷贝还需要递归——直到对象所有成员变量不再是指针。

                 ——深拷贝很难实现。

                 如果真要深拷贝,会通过归档的方式来实现深拷贝。

         setter方法的复制选项。

         @property合成属性时,可指定一个copy选项。

         —— 该copy选项控制,当程序对该属性赋值时,实际上被赋的值只是它的副本,而不是它本身。

         由此可见,只有当该属性的类型本身是可拷贝(copyWithZone:方法、NSCopying协议)的,此时才可用copy选项

          

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值