zoukankan      html  css  js  c++  java
  • Foundation框架: 1.常用结构体

    前面我们已经把OC的语法学完了, 现在我们来进阶一下, 学习一些稍微深层次一点的东西, 这个就是Foundation框架啦, 框架是什么东西?其实框架就是把类型, 方法一系列东西综合在一起, 这个就叫做框架, 现在我们来看看Foundation框架里的常用结构体之一的NSRange.





    讲解一下, 什么是NSRange, 其实NSRange是一个范围结构体, 可以用来对对象进行特定范围的操作, 比如:

    #import <Foundation/Foundation.h>
    
    int main(int argc, const char * argv[])
    {
        NSString *str = @"123456789";
        
        NSRange r1 = [str rangeOfString:@"9"];
        
        NSLog(@"location = %ld, length = %ld", r1.location, r1.length);
        
        return 0;
    }
    

    打印出来的结果:

    2015-02-02 22:22:20.067 1.NSRange[11839:980348] location = 8, length = 1
    

    这个结果是说字符@" 9 ", 在str字符串里是第8个位置, 长度是1.





    NSRange的创建方法:

        1.NSRange ra = {2, 4}; //不用<pre name="code" class="objc">    
    2.NSRange ra1 = {.location = 2, .length = 3}; //不用
        
    3.NSRange ra2 = NSMakeRange(<#NSUInteger loc#>, <#NSUInteger len#>); //最常用

    
    在实际开发里, 一般都是用第三个方法, 其他两个都不常用, 或者说几乎不用.
    

    有些人肯定有疑问, 找到字符串里的位置和长度是很正常的, 因为字符串里面本身就有, 但如果字符串里面没有呢? 那么会怎么样? 下面让我们一起来看看:

    #import <Foundation/Foundation.h>
    
    int main(int argc, const char * argv[])
    {
    
        
        NSString *str = @"123456789";
        
        NSRange r1 = [str rangeOfString:@"0"];
        
        NSLog(@"location = %ld, length = %ld", r1.location, r1.length);
        
        return 0;
    }
    

    打印出来的结果:

    2015-02-02 22:35:38.270 1.NSRange[11862:984557] location = 9223372036854775807, length = 0
    



    解释一下,  为什么location会打印一大串东西, 而length是0呢?? 首先解释一下length, 因为在字符串里不存在该字符, 所以也就没有长度可言, 返回值肯定是0, 那么location呢, 为什么location就会返回一大串东西? 其实一旦NSRange找不到该字符的时候, 返回的是NSNotFound, 而NSNotFound就是-1, 由于NSNotFoundunsignedlong类型, 所以打印出来是这么一大堆的数字, 下面让我们来看看:

    #import <Foundation/Foundation.h>
    
    int main(int argc, const char * argv[])
    {    
        NSLog(@"%d ---- %lu", NSNotFound, NSNotFound);
    
        return 0;
    }

    打印出来的结果:

    2015-02-02 22:45:45.497 1.NSRange[11947:987435] location = 9223372036854775807, length = 0
    2015-02-02 22:45:45.499 1.NSRange[11947:987435] -1 ---- 9223372036854775807


    让我们来看看NSRange里面元素是什么样的类型:

    typedef struct _NSRange {
        NSUInteger location;
        NSUInteger length;
    } NSRange;
    


    NSUInteger 表示的是 unsignedlong类型.




    好了, 这次我们就讲到这里, 下次我们继续~~

  • 相关阅读:
    架构师之路
    责任链设计模式
    Junit框架分析
    线程详解
    课程总结
    IO流
    Java第四次作业
    Character string
    实训
    实训SI
  • 原文地址:https://www.cnblogs.com/iOSCain/p/4282815.html
Copyright © 2011-2022 走看看